gpt4 book ai didi

Android - 如何使用 SQLiteDatabase.open?

转载 作者:太空宇宙 更新时间:2023-11-03 11:23:39 25 4
gpt4 key购买 nike

我正在尝试使用

SQLiteDatabase.openDatabase(
"/data/data/edwin11.myapp/databases/myapp.db", null, (SQLiteDatabase.CREATE_IF_NECESSARY | SQLiteDatabase.NO_LOCALIZED_COLLATORS));

创建/打开数据库而不是使用 SQLiteOpenHelper(因为我想传入标志 SQLiteDatabase.NO_LOCALIZED_COLLATORS

但是,对于那行代码,我得到了这个异常:

04-18 09:50:03.585: ERROR/Database(3471): sqlite3_open_v2("/data/data/edwin11.myapp/databases/myapp.db", &handle, 6, NULL) failed
04-18 09:50:03.665: ERROR/AndroidRuntime(3471): java.lang.RuntimeException: An error occured while executing doInBackground()
04-18 09:50:03.665: ERROR/AndroidRuntime(3471): at android.os.AsyncTask$3.done(AsyncTask.java:200)
04-18 09:50:03.665: ERROR/AndroidRuntime(3471): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:234)
04-18 09:50:03.665: ERROR/AndroidRuntime(3471): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:258)
04-18 09:50:03.665: ERROR/AndroidRuntime(3471): at java.util.concurrent.FutureTask.run(FutureTask.java:122)
04-18 09:50:03.665: ERROR/AndroidRuntime(3471): at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:648)
04-18 09:50:03.665: ERROR/AndroidRuntime(3471): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:673)
04-18 09:50:03.665: ERROR/AndroidRuntime(3471): at java.lang.Thread.run(Thread.java:1060)
04-18 09:50:03.665: ERROR/AndroidRuntime(3471): Caused by: android.database.sqlite.SQLiteException: unable to open database file
04-18 09:50:03.665: ERROR/AndroidRuntime(3471): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
04-18 09:50:03.665: ERROR/AndroidRuntime(3471): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1584)
04-18 09:50:03.665: ERROR/AndroidRuntime(3471): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:638)
...

在那行代码之前做一些测试(使用 File.isExists)显示文件 /data/data/edwin11.myapp/databases/myapp.db不存在。

这会是错误的原因吗? (或者我只是以错误的方式使用 SQLiteDatabase.openDatabase?)

如果我事先创建文件会有帮助吗? (这不应该由我传入的 SQLiteDatabase.CREATE_IF_NECESSARY 标志来处理吗?)

如果手动创建文件是可行的方法,它只是一个空文件,还是我必须向其中写入一些内容?

感谢和问候。

最佳答案

数据库文件存在于以下路径结构中:

   String sDbPath = "/data/data/" + YourMainActivityClass.class.getPackage().getName() + "/databases/YourDBFileName";

例如:如果您的应用程序存在于名为的包中; com.foo.bar,主要的 Activity 类名为 BabarActivity,DB 文件名为 MyData.db 您可以发出上述命令;

String sDbPath = "/data/data/" + com.foo.bar.BabarActivity.class.getPackage().getName() + "/databases/MyData.db";

现在,您可以使用此方法检查数据库文件是否存在:

boolean isDbExist() {
SQLiteDatabase checkDB = null;

try {
checkDB = SQLiteDatabase.openDatabase(sDbPath, null,
SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
Log.d(DB_NAME, "Database does't exist yet.", e);
}

if (checkDB != null) {
checkDB.close();
checkDB = null;
return true;
} else
return false;
}

希望这对您有所帮助!

关于Android - 如何使用 SQLiteDatabase.open?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2660806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com