我在我的代码中运行SQLiteDatabase中的delete方法,它说:
IllegalStateException:数据库未在日志中打开。
以下是代码段:
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()
还是一次?
答案 0 :(得分:2)
您需要先访问数据库。通常,当你使用SQLiteOpenHelper时,在删除之前你应该这样做:
db = this.getWriteableDatabase() // "this" is a subclass of SQLiteOpenHelper
答案 1 :(得分:0)
对于这类事情有很多帮助,但直接写入和读取数据库并不是成功的秘诀恕我直言。
答案 2 :(得分:0)
可能是你应该这样:
SQLiteDatabase db = mContext.openOrCreateDatabase(DB_NAME,
Context.MODE_PRIVATE, null);
之前的
db = this.getWriteableDatabase()