[英]Unable to open SQLite database stored at assets\databases using SQLiteAssetHelper
I am trying to use my SQLite database
from assets/databases
folder using SQLiteAssetHelper
class but I am getting following error:- 我正在尝试使用
SQLiteAssetHelper
类从assets/databases
文件夹中使用我的SQLite database
,但出现以下错误:-
09-25 01:34:53.007: E/SQLiteLog(1191): (14) cannot open file at line 30191 of [00bb9c9ce4]
09-25 01:34:53.007: E/SQLiteLog(1191): (14) os_unix.c:30191: (2) open(/data/data/com.sqlitetospinner1/databases/mydb.sqlite) -
09-25 01:34:53.067: E/SQLiteDatabase(1191): Failed to open database '/data/data/com.sqlitetospinner1/databases/mydb.sqlite'.
09-25 01:34:53.067: E/SQLiteDatabase(1191): android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
09-25 01:34:53.067: E/SQLiteDatabase(1191): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
09-25 01:34:53.067: E/SQLiteDatabase(1191): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
09-25 01:34:53.067: E/SQLiteDatabase(1191): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
09-25 01:34:53.067: E/SQLiteDatabase(1191): at com.crm.AssetsHelper.getAllColleges(AssetsHelper.java:37)
09-25 01:34:53.067: E/SQLiteDatabase(1191): at com.crm.Quote_Details.loadSpinnerData(Quote_Details.java:127)
09-25 01:34:53.067: E/SQLiteDatabase(1191): at com.crm.Quote_Details.onCreate(Quote_Details.java:66)
09-25 01:34:53.067: W/SQLiteAssetHelper(1191): could not open database mydb.sqlite - unknown error (code 14): Could not open database
09-25 01:34:53.077: W/SQLiteAssetHelper(1191): copying database from assets...
09-25 01:34:53.207: E/SQLiteAssetHelper(1191): Couldn't open mydb.sqlite for writing (will try read-only):
09-25 01:34:53.207: E/SQLiteAssetHelper(1191): com.readystatesoftware.sqliteasset.SQLiteAssetException: Missing databases/mydb.sqlite.zip file in assets or target folder not writable
09-25 01:34:53.207: E/SQLiteAssetHelper(1191): at android.content.res.AssetManager.openAsset(Native Method)
09-25 01:34:53.207: E/SQLiteAssetHelper(1191): at android.content.res.AssetManager.open(AssetManager.java:316)
09-25 01:34:53.207: E/SQLiteAssetHelper(1191): at android.content.res.AssetManager.open(AssetManager.java:290)
09-25 01:34:53.207: E/SQLiteAssetHelper(1191): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.copyDatabaseFromAssets(SQLiteAssetHelper.java:376)
09-25 01:34:53.207: E/SQLiteAssetHelper(1191): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.createOrOpenDatabase(SQLiteAssetHelper.java:355)
09-25 01:34:53.207: E/SQLiteAssetHelper(1191): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getWritableDatabase(SQLiteAssetHelper.java:178)
09-25 01:34:53.207: E/SQLiteAssetHelper(1191): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getReadableDatabase(SQLiteAssetHelper.java:257)
09-25 01:34:53.207: E/SQLiteAssetHelper(1191): at com.crm.AssetsHelper.getAllColleges(AssetsHelper.java:37)
09-25 01:34:53.207: E/SQLiteAssetHelper(1191): at com.crm.Quote_Details.loadSpinnerData(Quote_Details.java:127)
09-25 01:34:53.207: E/SQLiteAssetHelper(1191): at com.crm.Quote_Details.onCreate(Quote_Details.java:66)
This is my AssetHelper
class:- 这是我的
AssetHelper
类别:-
public class AssetsHelper extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "mydb.sqlite";
private static final int DATABASE_VERSION = 1;
public AssetsHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public List<String> getAllColleges(){
List<String> colleges = new ArrayList<String>();
String selectQuery = "SELECT * FROM colleges_list ORDER BY Organization_Name";
// Below is line number 37
SQLiteDatabase db = this.getReadableDatabase(); //Error comes from this line
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
colleges.add(cursor.getString(1));
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return colleges;
}
}
I have already given these permissions in manifest
:- 我已经在
manifest
授予了这些权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
I have also went through lot of SO questions but none of them were helpful in my case. 我也经历了很多SO问题,但对我的情况没有一个帮助。
Based on the diagnosis in comments, you're using an ancient version of the asset helper library and that is causing the problems. 根据注释中的诊断,您正在使用资产帮助程序库的旧版本,这会引起问题。
The latest jar is linked on the project's github page . 最新的jar链接在项目的github页面上 。
You need to place your database in assets/databases folder. 您需要将数据库放置在asset / databases文件夹中。
SQLiteAssetHelper expects to find the prepopulated database file in databases folder under assets. SQLiteAssetHelper希望在资产下的数据库文件夹中找到预填充的数据库文件。
so the placement of the SQLite will be like this 因此,SQLite的位置将如下所示
assets/
databases/
mydb.sqlite
And after it rebuild and reinstall the app and make sure the placement is right. 在重建并重新安装该应用程序之后,请确保放置正确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.