Android ORMLite DbHelper onCreate() 即使在卸载后也没有被调用
Android ORMLite DbHelper onCreate() not called even after uninstall
当我 运行 我的应用程序在重新安装后第一次
时出现此错误:
android.database.sqlite.SQLiteException: 没有这样的 table
(当我的应用试图从数据库中读取时会发生此错误)
由于某种原因,DBHelper 中的 onCreate() 方法没有被调用,因此 tables 没有被创建。我听从了其他问题的建议并尝试调用 getWritableDatabase(),还尝试调用 create() 以在某些 table 中插入数据,但仍然没有运气:从未调用过 onCreate。
不过,我通过将 DATABASE_VERSION 值更改为 2 来让它工作。但这没有意义,因为这是卸载后的全新安装。
我还发现,在 SQL 读取错误之前,数据库已创建,但它只有 1 table "android_metadata" (不是我创建的)。
我在这里发布一些代码以供参考
public class DatabaseHelper extends OrmLiteSqliteOpenHelper{
private static final String DATABASE_NAME = "RoutePlanner.db";
private static final int DATABASE_VERSION = 1;
private Dao<Trip, Integer> tripDAO = null;
private RuntimeExceptionDao<Trip, Integer> tripRunTimeDAO = null;
...
}
@Override
public SQLiteDatabase getWritableDatabase() {
return super.getWritableDatabase();
}
public DatabaseHelper(Context context){
super(context, DATABASE_NAME,null, DATABASE_VERSION, R.raw.ormlite_config);
}
@Override
public void onCreate(SQLiteDatabase db, ConnectionSource source) {
try {
Log.i(DatabaseHelper.class.getSimpleName(), "onCreate");
TableUtils.createTable(source, Trip.class);
...
} catch (SQLException ex) {
Log.e(DatabaseHelper.class.getSimpleName(), "Error creating db", ex);
throw new RuntimeException(ex);
}
}
好的,我发现了问题,希望这个解释能帮助其他人知道什么是不能做的。问题是我有一个单独的日历模块,我想访问我的数据库。为了让事情 'simpler' 我在该模块上创建了一个单独的 DatabaseHelper 来访问与我的主模块相同的 SQLite 数据库。第二个 DatabaseHelper 的存在导致了我所有的问题。解决方案要么将 2 个模块合二为一,要么使用数据库服务提供商
当我 运行 我的应用程序在重新安装后第一次
时出现此错误: android.database.sqlite.SQLiteException: 没有这样的 table
(当我的应用试图从数据库中读取时会发生此错误)
由于某种原因,DBHelper 中的 onCreate() 方法没有被调用,因此 tables 没有被创建。我听从了其他问题的建议并尝试调用 getWritableDatabase(),还尝试调用 create() 以在某些 table 中插入数据,但仍然没有运气:从未调用过 onCreate。
不过,我通过将 DATABASE_VERSION 值更改为 2 来让它工作。但这没有意义,因为这是卸载后的全新安装。 我还发现,在 SQL 读取错误之前,数据库已创建,但它只有 1 table "android_metadata" (不是我创建的)。 我在这里发布一些代码以供参考
public class DatabaseHelper extends OrmLiteSqliteOpenHelper{
private static final String DATABASE_NAME = "RoutePlanner.db";
private static final int DATABASE_VERSION = 1;
private Dao<Trip, Integer> tripDAO = null;
private RuntimeExceptionDao<Trip, Integer> tripRunTimeDAO = null;
...
}
@Override
public SQLiteDatabase getWritableDatabase() {
return super.getWritableDatabase();
}
public DatabaseHelper(Context context){
super(context, DATABASE_NAME,null, DATABASE_VERSION, R.raw.ormlite_config);
}
@Override
public void onCreate(SQLiteDatabase db, ConnectionSource source) {
try {
Log.i(DatabaseHelper.class.getSimpleName(), "onCreate");
TableUtils.createTable(source, Trip.class);
...
} catch (SQLException ex) {
Log.e(DatabaseHelper.class.getSimpleName(), "Error creating db", ex);
throw new RuntimeException(ex);
}
}
好的,我发现了问题,希望这个解释能帮助其他人知道什么是不能做的。问题是我有一个单独的日历模块,我想访问我的数据库。为了让事情 'simpler' 我在该模块上创建了一个单独的 DatabaseHelper 来访问与我的主模块相同的 SQLite 数据库。第二个 DatabaseHelper 的存在导致了我所有的问题。解决方案要么将 2 个模块合二为一,要么使用数据库服务提供商