2017-04-30 9 views
0

私はアンドロイドのアプリケーションを開発しており、70行100列の外部データベースを使用しています。各行でMy Appユーザーが次のボタンをクリックすると、アプリはデータベースの次の列に移動し、その内容を表示します。だから私は選択した列を増やしたり、減らしたりするために、列の名前に1〜100の数字を使う必要があります。それは日食でエラーを発生させます。たとえばID = 1の場合、「mani」列を選択すると、魅力的に機能しますが、「1」列には何も表示されません。SQLiteでカラム名をnumberにできますか?

Database Class : 
package com.codegostarNiloo.negar; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import android.content.Context; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class Database extends SQLiteOpenHelper { 

public static String DB_PATH; 
public static String DB_NAME = "negar.db"; 
private SQLiteDatabase myDataBase; 
private final Context myContext; 



public Database(Context context) { 

    super(context, DB_NAME, null, 1); 
    this.myContext = context; 
    DB_PATH = "/data/data/" + context.getPackageName() + "/" + "databases/"; 
} 



public void createDataBase() throws IOException { 

    copyDataBase(); 
    Log.d("isexist", "" + checkDataBase()); 
} 



private boolean checkDataBase() { 

    SQLiteDatabase checkDB = null; 

    try { 
     String myPath = DB_PATH + DB_NAME; 
     checkDB = SQLiteDatabase.openDatabase(myPath, null, 
       SQLiteDatabase.OPEN_READONLY); 

    } 
    catch (SQLiteException e) {} 

    if (checkDB != null) { 

     checkDB.close(); 

    } 

    return checkDB != null ? true : false; 
} 



private void copyDataBase() throws IOException { 
    File dir = new File(DB_PATH); 
    if (!dir.exists()) { 
     dir.mkdirs(); 
    } 
    File database = new File(dir, DB_NAME); 
    if (!database.exists()) { 

     InputStream myInput = myContext.getAssets().open(DB_NAME); 
     String outFileName = DB_PATH + DB_NAME; 
     OutputStream myOutput = new FileOutputStream(outFileName); 
     byte[] buffer = new byte[1024]; 
     int length; 
     while ((length = myInput.read(buffer)) > 0) { 
      myOutput.write(buffer, 0, length); 
     } 
     myOutput.flush(); 
     myOutput.close(); 
     myInput.close(); 
    } 
} 



public void openDataBase() throws SQLException { 

    // Open the database 
    String myPath = DB_PATH + DB_NAME; 
    // SQLiteDatabase.NO_LOCALIZED_COLLATORS 
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, 
      SQLiteDatabase.OPEN_READWRITE); 

} 



@Override 
public synchronized void close() { 

    if (myDataBase != null) 
     myDataBase.close(); 

    super.close(); 

} 



@Override 
public void onCreate(SQLiteDatabase arg0) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { 
    // TODO Auto-generated method stub 

} 
} 

MainActivityクラス:

// database method : 
    private void Database() throws Error { 
    myDbHelper = new Database(MainActivity.this); 
    try { 
     myDbHelper.createDataBase(); 
    } 
    catch (IOException ioe) { 

     throw new Error("Unable to create database"); 
    } 

    try { 
     myDbHelper.openDataBase(); 
    } 
    catch (SQLException sqle) { 
     throw sqle; 
    } 
} 

// Select column 1 of row 1: 
database(); 
db = myDbHelper.getWritableDatabase(); 
Cursor c = db.rawQuery("select * from mohtava where ID = " + 1, null); 
    if (c.moveToNext()) { 
    String j=c.getString(c.getColumnIndex("1")); 
     } 
db.close(); 
c.close(); 

データベース:http://www.axgig.com/images/23013560911355303754.jpg

エラー:

05-02 02:36:18.187: E/CursorWindow(26741): Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 3 columns. 
05-02 02:36:18.188: D/AndroidRuntime(26741): Shutting down VM 
05-02 02:36:18.188: W/dalvikvm(26741): threadid=1: thread exiting with uncaught exception (group=0x410e39a8) 
05-02 02:36:18.190: E/AndroidRuntime(26741): FATAL EXCEPTION: main 
05-02 02:36:18.190: E/AndroidRuntime(26741): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.codegostarNiloo.negar/com.codegostarNiloo.negar.MainActivity}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2377) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.ActivityThread.access$600(ActivityThread.java:167) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.os.Looper.loop(Looper.java:153) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.ActivityThread.main(ActivityThread.java:5341) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at java.lang.reflect.Method.invokeNative(Native Method) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at java.lang.reflect.Method.invoke(Method.java:511) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:929) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at dalvik.system.NativeStart.main(Native Method) 
05-02 02:36:18.190: E/AndroidRuntime(26741): Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.database.CursorWindow.nativeGetString(Native Method) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.database.CursorWindow.getString(CursorWindow.java:434) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at com.codegostarNiloo.negar.MainActivity.amoozesh(MainActivity.java:251) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at com.codegostarNiloo.negar.MainActivity.onCreate(MainActivity.java:114) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.Activity.performCreate(Activity.java:5125) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081) 
05-02 02:36:18.190: E/AndroidRuntime(26741): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2289) 
05-02 02:36:18.190: E/AndroidRuntime(26741): ... 11 more 
+0

col1、col2などの列に名前を付けないのはなぜですか? – Christian

+0

私は同じエラーが発生したことをテストしました! –

+0

イメージではなく、テキストとして(コードとしてフォーマットされた)テキストを貼り付けます。 – nasch

答えて

0

[OK]を、私の問題は解決しました。数値の名前を持つ列からレコードを読み取ることができます。

私はこのアプリケーションをテストするためにNOXエミュレータと私の開発を使用しました。彼らはデータベースをキャッシュし、毎回それを参照しました!

NOXをアンインストールして、以前インストールしたアプリを削除してから、再インストールしてください。 すべてのものが魅力的に機能します!

関連する問題