0

データベースのバージョンを 4 にアップグレードしたいと考えています。マニフェスト ファイルのバージョン コードを変更したため、データベースの openhelper が

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        DTLog.w("Old Version" + oldVersion, "new Version" + newVersion);
        DTLog.w("UPDATING DB", "Updating database");

        if (oldVersion == 1 && newVersion == 2) {
            db.execSQL("ALTER TABLE moduleRecord ADD COLUMN subtitle1 TEXT");
            db.execSQL("ALTER TABLE moduleRecord ADD COLUMN subtitle2 TEXT");
            db.delete("moduleRecord", null, null);

        } 
        else if ((oldVersion == 2&&newVersion == 3)) {
            db.execSQL("CREATE TABLE "
                    + "moduleDesc"
                    + "(deleteable INTEGER,createable INTEGER,updateable INTEGER,name TEXT,label TEXT,labelfields TEXT,fields TEXT);");

        } else {
            db.execSQL("DROP TABLE IF EXISTS " + "moduleRecord");
            db.execSQL("DROP TABLE IF EXISTS " + "ModuleName");
            db.execSQL("DROP TABLE IF EXISTS " + "EventStatus");
            db.execSQL("DROP TABLE IF EXISTS " + "moduleDesc");
            onCreate(db);
        }
    }

私が得るエラーは

     07-31 12:01:15.267: W/System.err(632): 
android.database.sqlite.SQLiteException: no such table: moduleDesc: ,
while compiling: insert into moduleDesc(deleteable,createable,updateable,name,label,labelfields,fields)
values(?,?,?,?,?,?,?)
    07-31 12:01:15.267: W/System.err(632):  
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
    07-31 12:01:15.267: W/System.err(632): 

at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
    07-31 12:01:15.267: W/System.err(632): 

at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
    07-31 12:01:15.267: W/System.err(632): 

at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)

データベースのアップグレード方法を教えてください

4

2 に答える 2

1

あなたの問題は、あなたが持っている if ステートメントのループである可能性があると思います。ユーザーがアプリケーションのバージョン 1 またはバージョン 2 を持っていて、最新のもの (4 だと思います) にアップグレードしたい場合はどうでしょうか。

その場合、単純に if ループを通過して finalに移動し、ユーザーがバージョン 1 または 2 からバージョン 3 へのアップグレードを計画した場合にのみ作成されるelsetable を削除しようとします。moduleDesc

要約すると、if ステートメントを調べて、すべての条件に対応します。

于 2012-07-31T06:45:56.773 に答える
0

mainfest ファイルを変更する必要はありません。SQL データベース クラスで変更できます。以下のコードを確認してください。DATABASE_VERSION =7 で変更する必要があります。

 public static final String TABLE_COMMENTS = "contacts";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_COMMENT = "account";
public static final String COLUMN_USER_ID = "contactJids";
public static final String COLUMN_USER_NAME = "contactNames";

private static final String DATABASE_NAME = "contacts.db";
private static final int DATABASE_VERSION =7;

// Database creation sql statement
private static final String DATABASE_CREATE = "create table "
        + TABLE_COMMENTS + "( " + COLUMN_ID     + " integer primary key autoincrement, "
                                + COLUMN_COMMENT + " text not null, " 
                                + COLUMN_USER_ID + " text not null, "
                                + COLUMN_USER_NAME + " text not null );";

public MySQLiteHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database) {
    database.execSQL(DATABASE_CREATE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w(MySQLiteHelper.class.getName(),
            "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_COMMENTS);
    onCreate(db);
}

  }
于 2012-07-31T06:44:25.743 に答える