SQLite的加列,保持数据 [英] SQLite add column, keep data

查看:186
本文介绍了SQLite的加列,保持数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有4列的数据库:

  @覆盖
公共无效的onCreate(SQLiteDatabase数据库){
        database.execSQL(CREATE TABLE+ DATABASENAME +(Name文本,纬度REAL,经度REAL,国家TEXT););
}
 

现在我想补充另一列,但保留了已经在数据库中的行。我应该怎么办呢?我找不到任何有用的参考这一点。

  @覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT ARG1,ARG2 INT){
    //这里做什么?
}
 

修改

我已经修改了我的onCreate为:

  @覆盖
公共无效的onCreate(SQLiteDatabase数据库){
    database.execSQL(CREATE TABLE+ DATABASENAME +(Name文本,纬度REAL,经度REAL,国文字,code文本););
}
 

和我onUpgrade为:

  @覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT ARG1,ARG2 INT){
    Logger.log(+ ARG1 +到+ ARG2 +从更新userstations数据库,);
    如果(ARG1 == 2&安培;&安培; ARG2 == 3){
        db.execSQL(ALTER TABLE+ DATABASENAME +ADD COLUMN code文本;);
    }否则,如果(ARG1 == 1){
        db.execSQL(DROP TABLE IF EXISTS+ DATABASENAME);
    }
    的onCreate(DB);
}
 

不过,现在我得到这个堆栈跟踪:

  10-01 21:24:19.581:ERROR /数据库(21434):失败1(表userstations已经存在)上0x19c378时preparingCREATE TABLE userstations(Name文本,REAL纬度,经度REAL,国文字,code文本)。
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):无法打开userstations写(会尝试只读):
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):android.database.sqlite.SQLiteException:表userstations已经存在:CREATE TABLE userstations(Name文本,纬度REAL,经度REAL,国文字,code文本);
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.database.sqlite.SQLiteDatabase.native_execSQL(本机方法)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1763)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在com.myapp.myapp.databases.UserStationsOpenHelper.onCreate(UserStationsOpenHelper.java:25)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在com.myapp.myapp.databases.UserStationsOpenHelper.onUpgrade(UserStationsOpenHelper.java:36)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:132)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在com.myapp.myapp.databases.UserStationsOpenHelper.getStations(UserStationsOpenHelper.java:43)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在com.myapp.myapp.Data.readUserStations(Data.java:369)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在com.myapp.myapp.Data.getUserStations(Data.java:210)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在com.myapp.myapp.stationstab.StationsActivity.newStations(StationsActivity.java:190)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在com.myapp.myapp.stationstab.StationsActivity.refresh(StationsActivity.java:129)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在com.myapp.myapp.stationstab.StationsActivity.onCreate(StationsActivity.java:108)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.ActivityThread.startActivityNow(ActivityThread.java:1598)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在com.myapp.myapp.stationstab.StationsActivityGroup.onCreate(StationsActivityGroup.java:38)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.ActivityThread.startActivityNow(ActivityThread.java:1598)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.widget.TabHost $ IntentContentStrategy.getContentView(TabHost.java:654)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.widget.TabHost.setCurrentTab(TabHost.java:326)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.widget.TabHost.addTab(TabHost.java:216)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在com.myapp.myapp.TreinVerkeer.setupTab(TreinVerkeer.java:131)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在com.myapp.myapp.TreinVerkeer.initTabs(TreinVerkeer.java:108)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在com.myapp.myapp.TreinVerkeer.onCreate(TreinVerkeer.java:62)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.ActivityThread.access $ 1500(ActivityThread.java:123)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:939)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.os.Handler.dispatchMessage(Handler.java:99)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.os.Looper.loop(Looper.java:123)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在android.app.ActivityThread.main(ActivityThread.java:3835)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在java.lang.reflect.Method.invokeNative(本机方法)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在java.lang.reflect.Method.invoke(Method.java:507)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:841)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
10-01 21:24:19.611:ERROR / SQLiteOpenHelper(21434):在dalvik.system.NativeStart.main(本机方法)
10-01 21:24:19.621:DEBUG / AndroidRuntime(21434):关闭虚拟机
10-01 21:24:19.621:WARN / dalvikvm(21434):主题ID = 1:螺纹退出与未捕获的异常(组= 0x4018a560)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):致命异常:主要
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.myapp.myapp / com.myapp.myapp.TreinVerkeer}:java.lang.RuntimeException的:无法启动活动ComponentInfo {com.myapp.myapp / com.myapp.myapp.stationstab.StationsActivityGroup}:java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.myapp.myapp / com.myapp.myapp.stationstab.StationsActivity} :android.database.sqlite.SQLiteException:无法升级只读从版本2数据库3:/data/data/com.myapp.myapp/databases/userstations
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.ActivityThread.access $ 1500(ActivityThread.java:123)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:939)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.os.Handler.dispatchMessage(Handler.java:99)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.os.Looper.loop(Looper.java:123)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.ActivityThread.main(ActivityThread.java:3835)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在java.lang.reflect.Method.invokeNative(本机方法)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在java.lang.reflect.Method.invoke(Method.java:507)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:841)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在dalvik.system.NativeStart.main(本机方法)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):java.lang.RuntimeException的:产生的原因无法启动活动ComponentInfo {com.myapp.myapp / com.myapp.myapp.stationstab.StationsActivityGroup}:JAVA。 lang.RuntimeException:无法启动活动ComponentInfo {com.myapp.myapp / com.myapp.myapp.stationstab.StationsActivity}:android.database.sqlite.SQLiteException:无法从版本升级只读数据库2到3:/数据/数据​​/ com.myapp.myapp /数据库/ userstations
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.ActivityThread.startActivityNow(ActivityThread.java:1598)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.widget.TabHost $ IntentContentStrategy.getContentView(TabHost.java:654)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.widget.TabHost.setCurrentTab(TabHost.java:326)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.widget.TabHost.addTab(TabHost.java:216)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在com.myapp.myapp.TreinVerkeer.setupTab(TreinVerkeer.java:131)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在com.myapp.myapp.TreinVerkeer.initTabs(TreinVerkeer.java:108)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在com.myapp.myapp.TreinVerkeer.onCreate(TreinVerkeer.java:62)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):11 ...更多
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):java.lang.RuntimeException的:产生的原因无法启动活动ComponentInfo {com.myapp.myapp / com.myapp.myapp.stationstab.StationsActivity}:机器人。 database.sqlite.SQLiteException:无法升级只读数据库从版本2到3:/data/data/com.myapp.myapp/databases/userstations
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.ActivityThread.startActivityNow(ActivityThread.java:1598)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在com.myapp.myapp.stationstab.StationsActivityGroup.onCreate(StationsActivityGroup.java:38)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):22 ...更多
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):android.database.sqlite.SQLiteException:产生的原因/data/data/com.myapp:无法从版本2到3升级只读数据库。 MyApp的/数据库/ userstations
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:199)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在com.myapp.myapp.databases.UserStationsOpenHelper.getStations(UserStationsOpenHelper.java:43)
10-01 21:24:19.641:ERROR / AndroidRuntime(21434):在com.myapp.myapp
 

解决方案

请参阅页面的语法创建上表中的新列。基本上,它是:

  ALTER TABLE MYTABLE ADD COLUMN根据MyColumn TEXT
 

在你onUpgrade方法,它看起来是这样的:

  @覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
    字符串upgradeQuery =ALTER TABLE MYTABLE ADD COLUMN根据MyColumn TEXT;
    如果(oldVersion == 1&安培;&安培; NEWVERSION == 2)
         db.execSQL(upgradeQuery);
}
 

I have a database with 4 columns:

@Override
public void onCreate(SQLiteDatabase database) {
        database.execSQL("CREATE TABLE " + DATABASENAME + " (name TEXT, latitude REAL, longitude REAL, country TEXT);");
}

Now I want to add another column, but keep the rows that are already in the database. How should I do this? I can't find any useful references to this.

@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
    //What to do here?
}

EDIT

I have modified my onCreate to:

@Override
public void onCreate(SQLiteDatabase database) {
    database.execSQL("CREATE TABLE " + DATABASENAME + " (name TEXT, latitude REAL, longitude REAL, country TEXT, code TEXT);");
}

and my onUpgrade to:

@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
    Logger.log("Updating userstations database from " + arg1 + " to " + arg2 + ".");
    if (arg1 == 2 && arg2 == 3) {
        db.execSQL("ALTER TABLE " + DATABASENAME + " ADD COLUMN code TEXT;");
    } else if(arg1 == 1){
        db.execSQL("DROP TABLE IF EXISTS " + DATABASENAME);
    }
    onCreate(db);
}

However, now I get this stacktrace:

10-01 21:24:19.581: ERROR/Database(21434): Failure 1 (table userstations already exists) on 0x19c378 when preparing 'CREATE TABLE userstations (name TEXT, latitude REAL, longitude REAL, country TEXT, code TEXT);'.
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434): Couldn't open userstations for writing (will try read-only):
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434): android.database.sqlite.SQLiteException: table userstations already exists: CREATE TABLE userstations (name TEXT, latitude REAL, longitude REAL, country TEXT, code TEXT);
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1763)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at com.myapp.myapp.databases.UserStationsOpenHelper.onCreate(UserStationsOpenHelper.java:25)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at com.myapp.myapp.databases.UserStationsOpenHelper.onUpgrade(UserStationsOpenHelper.java:36)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:132)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at com.myapp.myapp.databases.UserStationsOpenHelper.getStations(UserStationsOpenHelper.java:43)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at com.myapp.myapp.Data.readUserStations(Data.java:369)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at com.myapp.myapp.Data.getUserStations(Data.java:210)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at com.myapp.myapp.stationstab.StationsActivity.newStations(StationsActivity.java:190)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at com.myapp.myapp.stationstab.StationsActivity.refresh(StationsActivity.java:129)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at com.myapp.myapp.stationstab.StationsActivity.onCreate(StationsActivity.java:108)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:1598)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at com.myapp.myapp.stationstab.StationsActivityGroup.onCreate(StationsActivityGroup.java:38)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:1598)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.widget.TabHost.setCurrentTab(TabHost.java:326)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.widget.TabHost.addTab(TabHost.java:216)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at com.myapp.myapp.TreinVerkeer.setupTab(TreinVerkeer.java:131)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at com.myapp.myapp.TreinVerkeer.initTabs(TreinVerkeer.java:108)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at com.myapp.myapp.TreinVerkeer.onCreate(TreinVerkeer.java:62)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.ActivityThread.access$1500(ActivityThread.java:123)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.os.Looper.loop(Looper.java:123)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at android.app.ActivityThread.main(ActivityThread.java:3835)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at java.lang.reflect.Method.invokeNative(Native Method)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at java.lang.reflect.Method.invoke(Method.java:507)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
10-01 21:24:19.611: ERROR/SQLiteOpenHelper(21434):     at dalvik.system.NativeStart.main(Native Method)
10-01 21:24:19.621: DEBUG/AndroidRuntime(21434): Shutting down VM
10-01 21:24:19.621: WARN/dalvikvm(21434): threadid=1: thread exiting with uncaught exception (group=0x4018a560)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434): FATAL EXCEPTION: main
10-01 21:24:19.641: ERROR/AndroidRuntime(21434): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.myapp/com.myapp.myapp.TreinVerkeer}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.myapp/com.myapp.myapp.stationstab.StationsActivityGroup}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.myapp/com.myapp.myapp.stationstab.StationsActivity}: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 2 to 3: /data/data/com.myapp.myapp/databases/userstations
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.ActivityThread.access$1500(ActivityThread.java:123)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.os.Looper.loop(Looper.java:123)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.ActivityThread.main(ActivityThread.java:3835)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at java.lang.reflect.Method.invokeNative(Native Method)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at java.lang.reflect.Method.invoke(Method.java:507)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at dalvik.system.NativeStart.main(Native Method)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.myapp/com.myapp.myapp.stationstab.StationsActivityGroup}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.myapp/com.myapp.myapp.stationstab.StationsActivity}: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 2 to 3: /data/data/com.myapp.myapp/databases/userstations
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:1598)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.widget.TabHost.setCurrentTab(TabHost.java:326)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.widget.TabHost.addTab(TabHost.java:216)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at com.myapp.myapp.TreinVerkeer.setupTab(TreinVerkeer.java:131)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at com.myapp.myapp.TreinVerkeer.initTabs(TreinVerkeer.java:108)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at com.myapp.myapp.TreinVerkeer.onCreate(TreinVerkeer.java:62)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     ... 11 more
10-01 21:24:19.641: ERROR/AndroidRuntime(21434): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.myapp/com.myapp.myapp.stationstab.StationsActivity}: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 2 to 3: /data/data/com.myapp.myapp/databases/userstations
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:1598)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at com.myapp.myapp.stationstab.StationsActivityGroup.onCreate(StationsActivityGroup.java:38)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     ... 22 more
10-01 21:24:19.641: ERROR/AndroidRuntime(21434): Caused by: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 2 to 3: /data/data/com.myapp.myapp/databases/userstations
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:199)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at com.myapp.myapp.databases.UserStationsOpenHelper.getStations(UserStationsOpenHelper.java:43)
10-01 21:24:19.641: ERROR/AndroidRuntime(21434):     at com.myapp.myapp

解决方案

Please see this page for the syntax to create a new column on a table. Basically it is:

ALTER TABLE mytable ADD COLUMN mycolumn TEXT

In your onUpgrade method, it would look something like this:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    String upgradeQuery = "ALTER TABLE mytable ADD COLUMN mycolumn TEXT";
    if (oldVersion == 1 && newVersion == 2)
         db.execSQL(upgradeQuery);
}

这篇关于SQLite的加列,保持数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆