我收到一个错误,Logcat说某个列(在我的SQLiteOpenHelper子类中)不存在.我以为我可以通过更改DATABASE_CREATE字符串来升级数据库.但显然不是,那么我如何(逐步)将我的SQLite数据库从版本1升级到版本2?
如果问题看起来像"noobish",我很抱歉,但我仍然在学习Android.
@ Pentium10这是我在onUpgrade中所做的:
private static final int DATABASE_VERSION = 1;
....
switch (upgradeVersion) {
case 1:
db.execSQL("ALTER TABLE task ADD body TEXT");
upgradeVersion = 2;
break;
}
...
Run Code Online (Sandbox Code Playgroud) 我发现问题在更新应用版本后,在我上传的应用程序中找不到这样的表"table_name".我在测试后出来我只是在将旧版本的应用程序升级到新版本的应用程序之后才遇到此问题
我所实施的内容
我已经在onUpgrade()方法中完成了代码,并且还在构造函数中升级了db版本,但我无法在设备中对其进行测试.
步骤1) 将版本代码1增加到2
public databasehelper(Context context) {
super(context, DATABASE_NAME, null, 2);
this.myContext = context;
try {
createDataBase();
openDataBase();
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
步骤2)将新表添加到onUpgrade()方法中
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.e("onUpgrade db", ">>>>called");
switch (oldVersion) {
case 1:
db.execSQL(DATABASE_CREATE_notification_counter);
Log.e("db version", ">>>"+oldVersion);
// we want both updates, so no break statement here...
case 2:
Log.e("db version", ">>>"+oldVersion);
// I removed onCreate() method from here because new version will …Run Code Online (Sandbox Code Playgroud) 我有一个数据库,我想添加一个列,我更改了静态数据库版本,但是当我在我的设备上运行程序时,新列仍然没有,所以我猜我onUpdate没有被调用,我不知道为什么.
这就是我创建数据库的方式
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
createTables(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
{
Log.w("CalendarDB", "Upgrading database from version " + oldVersion
+ " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS Events_Table");
onCreate(db);
}
private void createTables(SQLiteDatabase db){
db.execSQL("CREATE TABLE " + EVENTS_TABLE + "(" + ID + …Run Code Online (Sandbox Code Playgroud) 我有一个Android应用程序,它使用SQLite数据库和Active Android作为ORM.在每次应用更新时,我需要使用新的/更新的数据发送我的数据库.这就是我一直在做的事情
因此,当用户获取应用程序时,它将使用带有新内容的my_app_v2.db.
我知道Active Android 支持迁移脚本,但在每次数据库更新时,我需要添加/更新大约2000多条记录.因此,对于每个数据库更新,我需要一个包含2000多个插入/更新语句的迁移脚本,这意味着对于3个以上的连续升级,应用程序必须执行大约6000多个语句.
我想知道我用新的数据库替换整个数据库的方法是不好的做法,应该首选迁移脚本.
我已经构建了一个Android应用程序,我insertSampleData()
从onCreate()主要活动的方法调用该方法.
问题是onCreate()每次启动应用程序时都会调用该方法,这会导致我的数据库填充大量样本数据.
我想在安装应用程序时只提供一次示例数据.谁能告诉我怎么做?非常感谢 !
PS:该方法insertSampleData()用于将样本数据插入到Sq-lite数据库中.