5

DatabaseHelper onUpgrade に列を追加し、既存の行を特定の値に設定するにはどうすればよいですか?

私は試した:

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    ...
       if (oldVersion < 2) {
          db.execSQL("ALTER TABLE " + MyTableName + " ADD COLUMN "
              + MyNewColumn + " TEXT;");      
          db.execSQL("UPDATE " + MyTableName  + " SET " +
               MyNewColumn  + "=" + "value for existing;");
       }
    }

しかし、列が存在しないと表示されているため、変更はまだコミットされていないと思います。なにか提案を?

編集:周囲のコードをいくつか追加

編集:私の間違い。値の部分を引用符で囲んでいなかっただけで、列がないというエラーで気を失いましたが、問題は、引用符なしで使用した値の列を探していたことです。

4

2 に答える 2

1

データベースをアップグレードするたびにonUpgradeが実行され、2回目の列の追加は失敗するため、これまでに示したように列を追加するのは簡単ではありません。キャッチ

try {
    db.execSQL("ALTER TABLE sometable ADD COLUMN newcolumn integer");   
}
catch(Exception e) {
    e.printStackTrace();
}

より良い方法は、すべてのデータをテーブルから一時テーブルに移動し、テーブルをドロップして再作成し、データを元に戻すことです。これは、以前に使用したものの例です。

//Update old Table
        if(DBVER< 1060){

            List<String> columns = DB.GetColumns(db, "listitems");
            db.execSQL("ALTER table listitems RENAME TO 'temp_listitems); ") ;
            String tblListItems = "create table if not exists listitems " +
                    "(id integer primary key autoincrement, " +
                    "listid integer, " +
                    "itemid integer, " +
                    "qty integer, " +
                    "collected integer, " +
                    "qtytype integer, " +
                    "tabid integer); " ;
            db.execSQL(tblListItems);
            columns.retainAll(DB.GetColumns(db, "listitems"));
            String cols = DB.join(columns, ","); 
            db.execSQL(String.format( "INSERT INTO %s (%s) SELECT %s from temp_%s", "listitems", cols, cols, "listitems"));
            db.execSQL("DROP table 'temp_" + "listitems");



        }

ここにリンクがありますhttp://www.devdaily.com/android/sqlite-alter-table-syntax-examples

于 2012-05-14T19:48:28.797 に答える
0
 db.execSQL("ALTER TABLE " + MyTableName + " ADD "
           + MyNewColumn + " TEXT;"); 

列なしで試してください:構文は次のとおりです。

ALTER TABLE [TABLE_NAME] ADD [COLUMN_NAME] DATATYPE

于 2012-05-14T19:49:01.470 に答える