为什么不会SQLite数据库更新?添加列
问题描述:
我已经试过寻找虽然已经问了几个关于这个主题的问题,但我仍然无法让我的文件工作。我想也许有些直接的帮助可能正是我需要的,所以我虚心向社区寻求帮助。谢谢你的时间为什么不会SQLite数据库更新?添加列
public class RemindersDbAdapter {
//
// Database Related Constants
//
private static final String DATABASE_NAME = "data";
private static final String DATABASE_TABLE = "reminders";
private static final int DATABASE_VERSION = 3;
public static final String KEY_TITLE = "title";
public static final String KEY_CUSTOMER = "body";
public static final String KEY_DATE_TIME = "reminder_date_time";
public static final String KEY_END_TIME = "reminder_end_time";
public static final String KEY_ROWID = "_id";
private static final String TAG = "ReminderDbAdapter";
private DatabaseHelper mDbHelper;
private static SQLiteDatabase mDb;
/**
* Database creation SQL statement
*/
private static final String DATABASE_CREATE =
"create table " + DATABASE_TABLE + " ("
+ KEY_ROWID + " integer primary key autoincrement, "
+ KEY_TITLE + " text not null, "
+ KEY_CUSTOMER + " text not null, "
+ KEY_DATE_TIME + " text not null);" ;
private final Context mCtx;
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
//Adding a Column
// If you need to add a column
if (newVersion > oldVersion)
{
//example I tried pulling from the internet
db.execSQL(
"ALTER TABLE foo ADD COLUMN new_column INTEGER DEFAULT 0");
}
onCreate(db);
}
}
答
如果你想升级数据库,只需在你的CREATE语句中添加新列,然后增加版本。
你的代码试图将列添加到您刚才删除的表...
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); // Delete table
...
db.execSQL("ALTER TABLE foo ADD COLUMN new_column INTEGER DEFAULT 0"); // Won't find the table
简单地改变这样的:
private static final String DATABASE_CREATE =
"create table " + DATABASE_TABLE + " ("
+ KEY_ROWID + " integer primary key autoincrement, "
+ KEY_TITLE + " text not null, "
+ KEY_CUSTOMER + " text not null, "
+ KEY_DATE_TIME + " text not null, "
+ "new_column INTEGER DEFAULT 0);" ;
谢谢你,看来我是在我的问题误。你看我最初没有添加列语句,我认为这是我应该更新一个数据库的另一个问题,我有。感谢您解决我引起的新问题。 – user1457104
谢谢你的帮助,它现在运行,我只是现在有一个问题与其他东西哈哈。 – user1457104
很高兴你正在取得进展!如果您在发布新问题后遇到问题,请将logcat错误与代码示例一起包含。 (他们真的帮助!) – Sam