我在服务器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)
解决方案
正在关闭数据库使更新或插入前!
交换语句:
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();