我在Android市场上有一个应用程序,现在我想更改数据库字段。我想在特定的表中添加两个新字段。您能帮助我如何向表中添加两个新列吗?
这是我的代码。
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)
答案 0 :(得分:30)
您一次只能添加一列。将它分成两个ALTER TABLE
语句,你应该没问题。
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);
}
答案 1 :(得分:0)
例如在版本2中,向数据库添加新列的正确方法是:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
db.execSQL("ALTER TABLE mytable ADD COLUMN mycolumn TEXT");
}
}
它涵盖了所有陷阱,包括重大问题:如果用户从版本1升级到版本3,他们将完全错过升级查询!这些用户将处于尴尬的境地,他们缺少一些中间更新,并且没有预期的sql模式。
也不要忘记更改create语句以添加新列。