2012-03-27 1 views
0

私は真の偽値を持つようにSQLテーブルを修正しようとしています。私は1または0のタイプBITを使用しています。テーブルを変更しようとしましたが、正しく動作していないようです。列インデックスは-1です。私sqlitehelperクラスのTRUE/FALSEの値を持つ列が含まれるようにSQLテーブルを変更するにはどうすればよいですか?

、私は私のONUPGRADE方法のためにこれを使用してみました:

@Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 

     Log.d(TAG,"inner onupgrade called"); 
     Log.w(TAG, "Upgrading database from version " 
       + oldVersion + " to " 
       + newVersion + ", which will destroy all old data"); 
     //db.execSQL("DROP TABLE IF EXISTS " + TableMetaData.TABLE_NAME); 
     db.execSQL("ALTER TABLE " + TableMetaData.TABLE_NAME 
       + " ADD COLUMN " + TableMetaData.HAS_UPLOADED + " BIT DEFAULT 0" 
       + ";"); 
      //onCreate(db); 
    } 

私は後で私のアプリでコラムを読んしようとすると、私はエラーを取得し、私は列インデックスであることを-1見つけます。テーブルを正しく修正していますか?ここで

私はlogcatから取得エラーです:

03-27 17:48:37.111: E/CursorWindow(2884): Bad request for field slot 0,-1. numRows = 1, numColumns = 5 
03-27 17:48:37.111: D/AndroidRuntime(2884): Shutting down VM 
03-27 17:48:37.111: W/dalvikvm(2884): threadid=1: thread exiting with uncaught exception (group=0x400259f8) 
03-27 17:48:37.131: E/AndroidRuntime(2884): FATAL EXCEPTION: main 
03-27 17:48:37.131: E/AndroidRuntime(2884): java.lang.IllegalStateException: get field slot from row 0 col -1 failed 
03-27 17:48:37.131: E/AndroidRuntime(2884):  at android.database.CursorWindow.getString_native(Native Method) 
03-27 17:48:37.131: E/AndroidRuntime(2884):  at android.database.CursorWindow.getString(CursorWindow.java:329) 
03-27 17:48:37.131: E/AndroidRuntime(2884):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:49) 

答えて

0

ではありません。

public class ThoughtProvider extends ContentProvider 
{ 
//Logging helper tag. No significance to providers. 
private static final String TAG = "ThoughtProvider"; 

//Projection maps are similar to "as" construct 
//in an sql statement where by you can rename the 
//columns. 
private static HashMap<String, String> sBooksProjectionMap; 
static 
{ 
    sBooksProjectionMap = new HashMap<String, String>(); 
    sBooksProjectionMap.put(TableMetaData._ID, 
           TableMetaData._ID); 

//I needed to add: 


    sBooksProjectionMap.put(TableMetaData.HAS_UPLOADED, 
          TableMetaData.HAS_UPLOADED); 
0

短い答え、BITデータ型は、私はハッシュマップに列を追加しなかったのContentProviderでsqlite3のhttp://sqlite.org/datatype3.html

+0

タイプをINTEGERに変更し、同じことが起こっているようです。 – Stagleton