安卓SQLiteCantOpenDatabaseException:未知错误(code 14):无法打开数据库无法打开、错误、数据库、SQLiteCantOpenDatabaseException

2023-09-03 22:12:23 作者:︶ㄣ不懂我心痛℡

我在服务器JSON URL值和获得这些值,然后存储到本地数据库。但是,当我得到这些值和存储到本地数据库,我越来越无法打开数据库。

  SQLiteDatabase CHECKDB = NULL;
            尝试 {
                CHECKDB = SQLiteDatabase.openDatabase(/数据/数据​​/ com.example.testjson /数据库/详细信息,空,
                        SQLiteDatabase.OPEN_READONLY);
                checkDB.close();


                db.updateDetails(店);


            }赶上(SQLiteException E){
                //数据库不存在。

                // Log.i(DatabaseInserted,没有找到);

                 db.insertDetails(店);

            }
 

日志:

  12-15 17:23:17.555:E / SQLiteLog(17270):(14)无法打开文件在32516行[00bb9c9ce4]
12-15 17:23:17.555:E / SQLiteLog(17270):(14)os_unix.c:32516:(2)开(/data/data/com.example.beacon/databases/BeaconDetails) - 
12-15 17:23:17.560:E / SQLiteDatabase(17270):无法打开数据库'/data/data/com.example.beacon/databases/BeaconDetails。
12-15 17:23:17.560:E / SQLiteDatabase(17270):android.database.sqlite.SQLiteCantOpenDatabaseException:未知错误(code 14):无法打开数据库
12-15 17:23:17.560:E / SQLiteDatabase(17270):在android.database.sqlite.SQLiteConnection.nativeOpen(本机方法)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:339)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:236)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:515)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:207)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:178)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:891)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:859)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:696)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:671)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在com.example.beacon.MainActivity $ JsonTask.doInBackground(MainActivity.java:226)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在com.example.beacon.MainActivity $ JsonTask.doInBackground(MainActivity.java:1)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在android.os.AsyncTask $ 2.call(AsyncTask.java:287)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在java.util.concurrent.FutureTask.run(FutureTask.java:234)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在android.os.AsyncTask $ SerialExecutor $ 1.运行(AsyncTask.java:230)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:573)
12-15 17:23:17.560:E / SQLiteDatabase(17270):在java.lang.Thread.run(Thread.java:841)
 

解决方案 谷歌更新 Android 12 开发者预览版,安全与隐私保护功能更可靠

正在关闭数据库使更新或插入前!

交换语句:

  db.updateDetails(店);
checkDB.close();
 

I have values in server json url and getting those values then storing into local database. But when i get those values and storing into local database i'm getting Failed to open database.

SQLiteDatabase checkDB = null;
            try {
                checkDB = SQLiteDatabase.openDatabase("/data/data/com.example.testjson/databases/Details", null,
                        SQLiteDatabase.OPEN_READONLY);
                checkDB.close();


                db.updateDetails(store);


            } catch (SQLiteException e) {
                // database doesn't exist yet.

                // Log.i("DatabaseInserted", "No Found");

                 db.insertDetails(store);

            }

Log:

12-15 17:23:17.555: E/SQLiteLog(17270): (14) cannot open file at line 32516 of [00bb9c9ce4]
12-15 17:23:17.555: E/SQLiteLog(17270): (14) os_unix.c:32516: (2) open(/data/data/com.example.beacon/databases/BeaconDetails) - 
12-15 17:23:17.560: E/SQLiteDatabase(17270): Failed to open database '/data/data/com.example.beacon/databases/BeaconDetails'.
12-15 17:23:17.560: E/SQLiteDatabase(17270): android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:339)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:236)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:515)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:207)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:178)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:891)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:859)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:696)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:671)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at com.example.beacon.MainActivity$JsonTask.doInBackground(MainActivity.java:226)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at com.example.beacon.MainActivity$JsonTask.doInBackground(MainActivity.java:1)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
12-15 17:23:17.560: E/SQLiteDatabase(17270):    at java.lang.Thread.run(Thread.java:841)

解决方案

you are closing the Db before making update or insert!

swap the statements to:

db.updateDetails(store);
checkDB.close();