在onUpgrade中更改数据库会导致崩溃

时间:2016-05-06 05:26:38

标签: android database sqlite

我想在现有表中添加一列,因此我在onUpgrade中编写了以下查询

     @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    String addMeasureJsonQuery = "ALTER TABLE " + SqlCard.TOOTEET_TABLE + " ADD COLUMN " + Columns.Tooteet.MEASURE_JSON + " TEXT";
    if (oldVersion == 1 && newVersion == 2){
       db.execSQL(addMeasureJsonQuery);
    }

同样更新了数据库版本为2.但我的应用程序崩溃了以下错误

  

致命异常:Thread-1516进程:MyPackageName,PID:2117

     

android.database.sqlite.SQLiteException:near“CREATE”:语法错误   (代码1):,编译时:ALTER TABLE CREATE TABLE IF NOT NOT EXISTS   tooteets(id TEXT,text TEXT,file_url_1 TEXT,file_url_2 TEXT,   thumb_url_1 TEXT,thumb_url_2 TEXT,color TEXT,local_parent_folder   TEXT,unique_file_name TEXT,unique_thumbnail_name TEXT,keywords   TEXT,created_user_name TEXT,updated_user_name TEXT,is_favorite   INTEGER DEFAULT 0,is_tooti_author INTEGER DEFAULT 1,tweet_type   INTEGER,等级INTEGER DEFAULT 0,weather_type INTEGER DEFAULT 0,   纬度DOUBLE DEFAULT 0.0,经度DOUBLE DEFAULT 0.0,group_key   TEXT,tweet_date INTEGER,group_sort_order INTEGER,   no_of_unread_tooteets INTEGER DEFAULT 0,no_of_comments INTEGER   DEFAULT 0,no_of_unread_comments INTEGER DEFAULT 0,lane_id TEXT,   lane_name TEXT,expense_json TEXT,is_synced INTEGER DEFAULT 0,   is_update INTEGER DEFAULT 0,is_deleted INTEGER DEFAULT 0)ADD COLUMN   measure_json TEXT

     

在   android.database.sqlite.SQLiteConnection.nativePrepareStatement(母语   方法)

     

在   android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1113)

     

在   android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:690)

     

在   android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)

     

在android.database.sqlite.SQLiteProgram。(SQLiteProgram.java:58)

     

在   android.database.sqlite.SQLiteStatement。(SQLiteStatement.java:31)

     

在   android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1806)

     

在   android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1737)

     

at MyPackageName.database.DBSQLite.onUpgrade(DBSQLite.java:80)

     

在   android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:257)

     

在   android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)

     

at MyPackageName.database.DBSQLite.getDatabase(DBSQLite.java:56)

     

at MyPackageName.MyApplicationClass $ 1.run(MyApplicationClass.java:68)

     

在java.lang.Thread.run(Thread.java:841)

您能否建议我解决这个问题?在此先感谢...

1 个答案:

答案 0 :(得分:2)

您应该直接提供表格名称(tooteets)而不是SqlCard.TOOTEET_TABLE。因此,只有您在#34; CREATE"

附近获得例外。

您可以使用我使用的以下代码。

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

   // If you need to add a column
   if (newVersion > oldVersion) {
      db.execSQL("ALTER TABLE tooteets ADD COLUMN measure_json TEXT");
   }
}