繁体   English   中英

Android - 如何使用SQLiteDatabase.open?

[英]Android - How to Use SQLiteDatabase.open?

我正在尝试使用

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;
}

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM