【发布时间】:2015-08-29 04:22:26
【问题描述】:
我在我的代码中运行 SQLiteDatabase 中的删除方法,它说:
IllegalStateException : 数据库未在日志中打开。
这里是sn-p的代码:
String whereClause = getWhereClause(compareColumn, compareValue);
db.delete(tableName, whereClause, null);
这是正在生成的 logcat。
04-03 16:32:09.514: E/DB DELETE ERROR(310): java.lang.IllegalStateException: database not open
04-03 16:32:09.514: W/System.err(310): java.lang.IllegalStateException: database not open
04-03 16:32:09.523: W/System.err(310): at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1585)
04-03 16:32:09.523: W/System.err(310): at mylibs.testshop.deleteRow(testshop.java:78)
04-03 16:32:09.523: W/System.err(310): at com.example.testapp.shopping_list$1.onClick(shopping_list.java:98)
04-03 16:32:09.523: W/System.err(310): at android.view.View.performClick(View.java:2408)
04-03 16:32:09.523: W/System.err(310): at android.view.View$PerformClick.run(View.java:8816)
04-03 16:32:09.523: W/System.err(310): at android.os.Handler.handleCallback(Handler.java:587)
04-03 16:32:09.533: W/System.err(310): at android.os.Handler.dispatchMessage(Handler.java:92)
04-03 16:32:09.533: W/System.err(310): at android.os.Looper.loop(Looper.java:123)
04-03 16:32:09.533: W/System.err(310): at android.app.ActivityThread.main(ActivityThread.java:4627)
04-03 16:32:09.533: W/System.err(310): at java.lang.reflect.Method.invokeNative(Native Method)
04-03 16:32:09.533: W/System.err(310): at java.lang.reflect.Method.invoke(Method.java:521)
04-03 16:32:09.533: W/System.err(310): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-03 16:32:09.533: W/System.err(310): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-03 16:32:09.533: W/System.err(310): at dalvik.system.NativeStart.main(Native Method)
我在我的数据库类的顶部创建了一个构造函数。 Helper 是 SQLiteOpenHelper 的一个实例,代码:
public testshop(Context context) {
this.context = context;
// create or open the database
helper = new CustomSQLiteOpenHelper(context);
this.db = helper.getWritableDatabase();
}
那么我应该每次查询数据库时都使用getWriteableDatabase()还是一次?
【问题讨论】:
-
这意味着您必须在执行查询之前创建与数据库的连接。 :)
-
打开你的数据库,然后就可以使用了。
-
我该怎么做,因为我可以在同一个类中运行其他查询,例如插入。只有删除会出错。 @kocko
-
我该怎么做? @维格
-
我需要看看你是如何设置你的数据库的——如果你使用的是 dbHelper。
标签: java android sqlite android-sqlite