如何向Android SQLite数据库添加两个新列?

如何向Android SQLite数据库添加两个新列?,android,database,sqlite,Android,Database,Sqlite,我在android market上有一个应用程序,现在我想更改数据库字段。我想向特定表中添加两个新字段。您能帮助我如何向表中添加两个新列吗 这是我的密码 private static final String ALTER_USER_TABLE = "ALTER TABLE user_table ADD user_society text,user_street1 text;"; @Override public void onUpgrade(SQLiteDatabase db, int

我在android market上有一个应用程序,现在我想更改数据库字段。我想向特定表中添加两个新字段。您能帮助我如何向表中添加两个新列吗

这是我的密码

 private static final String ALTER_USER_TABLE = "ALTER TABLE user_table ADD user_society text,user_street1 text;"; 

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
 {
    db.execSQL(ALTER_USER_TABLE);
 }
执行后,我出现以下错误

W/System.err(  717): android.database.sqlite.SQLiteException: near ",": syntax error: ALTER TABLE user_table ADD user_society text,user_street1 text;
W/System.err(  717):    at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
W/System.err(  717):    at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1727)
W/System.err(  717):    at com.kbobs.org.database.Database$DatabaseHelper.onUpgrade(Database.java:48)
W/System.err(  717):    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:108)
W/System.err(  717):    at com.kbobs.org.database.Database.OpenDatabase(Database.java:54)
W/System.err(  717):    at com.kbobs.org.ui.Login$2.handleMessage(Login.java:222)
W/System.err(  717):    at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err(  717):    at android.os.Looper.loop(Looper.java:123)
W/System.err(  717):    at android.app.ActivityThread.main(ActivityThread.java:4627)
W/System.err(  717):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(  717):    at java.lang.reflect.Method.invoke(Method.java:521)
W/System.err(  717):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
W/System.err(  717):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

一次只能添加一列。将其拆分为两个
altertable
语句,您就可以了

private static final String ALTER_USER_TABLE_ADD_USER_SOCIETY = 
    "ALTER TABLE user_table ADD user_society TEXT";
private static final String ALTER_USER_TABLE_ADD_USER_STREET1 = 
    "ALTER TABLE user_table ADD user_street1 TEXT";

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{
   db.execSQL(ALTER_USER_TABLE_ADD_USER_SOCIETY);
   db.execSQL(ALTER_USER_TABLE_ADD_USER_STREET1);
}

向DB添加新列的正确方法(例如在版本2中)是:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < 2) {
         db.execSQL("ALTER TABLE mytable ADD COLUMN mycolumn TEXT");
    }
}
@覆盖
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
如果(旧版本<2){
execSQL(“ALTERTABLE mytable ADD COLUMN mycolumn TEXT”);
}
}
它涵盖了所有陷阱,包括主要问题:如果用户从版本1升级到版本3,他们将完全错过升级查询!这些用户将处于尴尬的境地,他们缺少一些中间更新,并且没有预期的sql模式


另外,不要忘记更改create语句,添加新列。

非常感谢您宝贵的时间,为我提供了很多帮助。如果您创建一个临时表,并将现有表的行复制到临时表中,这是可能的。删除现有表并再次创建该表,然后从临时表复制。String table_temp=“create TEMPORARY table”+试探性名称+…”@DEV,因为这是一个老问题,但仅供其他人参考:您不能在单个查询中执行这些操作(alter),您必须为每个操作执行一个。因此,我可以使用此解决方案添加一个新列,但它会删除数据库中的现有数据,而新列是空的。为什么会发生这种情况?