Aam*_*han 77 database sqlite android
我有Android SQLite数据库的一个问题.
我有一个表包含一个field.StudentFname和该应用程序与Android 2.3.1正常工作,现在如果我添加另一个字段,那么我的应用程序无法正常工作.
任何人都可以帮助我了解数据库的人,
Dev*_*udh 177
你可以ALTER TABLE在你的onUpgrade()方法上使用函数,如下所示:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// If you need to add a column
if (newVersion > oldVersion) {
db.execSQL("ALTER TABLE foo ADD COLUMN new_column INTEGER DEFAULT 0");
}
}
Run Code Online (Sandbox Code Playgroud)
显然,SQLite将根据列定义而有所不同.
PFr*_*ise 27
我在自己的应用程序上需要帮助时遇到了这个帖子,但是看到了很多答案的问题.我建议你做以下事情:
private static final String DATABASE_ALTER_TEAM_1 = "ALTER TABLE "
+ TABLE_TEAM + " ADD COLUMN " + COLUMN_COACH + " string;";
private static final String DATABASE_ALTER_TEAM_2 = "ALTER TABLE "
+ TABLE_TEAM + " ADD COLUMN " + COLUMN_STADIUM + " string;";
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
db.execSQL(DATABASE_ALTER_TEAM_1);
}
if (oldVersion < 3) {
db.execSQL(DATABASE_ALTER_TEAM_2);
}
}
Run Code Online (Sandbox Code Playgroud)
您希望确保在用户升级多个版本时代码将起作用,并且update语句仅运行所需的一次升级.有关这方面的更多信息,请查看此博客.
use*_*305 22
最简单的方法是SQL to the onUpgrade()在你的方法中添加一些方法SQLiteOpenHelper class.就像是:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// If you need to add a new column
if (newVersion > oldVersion) {
db.execSQL("ALTER TABLE student ADD COLUMN student_rollno INTEGER DEFAULT 0");
}
}
Run Code Online (Sandbox Code Playgroud)
Edw*_*gby 14
也许使用switch而不是if/then会稍微优雅的方法将从任何架构升级到最新的架构......
这里也是改变表格语法的一个不错的页面:http://alvinalexander.com/android/sqlite-alter-table-syntax-examples
public static final String TABLE_TEAM = "team";
public static final String COLUMN_COACH = "coach";
public static final String COLUMN_STADIUM = "stadium";
private static final String DATABASE_ALTER_TEAM_TO_V2 = "ALTER TABLE "
+ TABLE_TEAM + " ADD COLUMN " + COLUMN_COACH + " TEXT;";
private static final String DATABASE_ALTER_TEAM_TO_V3 = "ALTER TABLE "
+ TABLE_TEAM + " ADD COLUMN " + COLUMN_STADIUM + " TEXT;";
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion)
{
case 1:
//upgrade from version 1 to 2
db.execSQL(DATABASE_ALTER_TEAM_TO_V2);
case 2:
//upgrade from version 2 to 3
db.execSQL(DATABASE_ALTER_TEAM_TO_V3);
//and so on.. do not add breaks so that switch will
//start at oldVersion, and run straight through to the latest
}
}
Run Code Online (Sandbox Code Playgroud)
我已经完成了以下方法,它已为我解决
如果数据库版本:6
Ex : There is a table with 5 columns
Run Code Online (Sandbox Code Playgroud)
当您升级到:7(我在 3 个表中添加 1 个新列)
1. We need to add the columns when creating a table
2. onUpgrade method:
if (oldVersion < 7)
{
db.execSQL(DATABASE_ALTER_ADD_PAPER_PAID);
db.execSQL(DATABASE_ALTER_LAST_UPLOADED);
db.execSQL(DATABASE_ALTER_PAPER_LABEL);
}
Run Code Online (Sandbox Code Playgroud)
其中:“DATABASE_ALTER_ADD_PAPER_PAID”是查询。
EX: public static final String DATABASE_ALTER_ADD_PAPER_PAID = "ALTER TABLE "
+ TableConstants.MY_PAPERS_TABLE + " ADD COLUMN " + COLUMN_PAPER_PAID + " TEXT;";
Run Code Online (Sandbox Code Playgroud)
经过以上两个操作后,对于全新安装用户和应用程序升级用户来说就可以正常工作了