无法使用SQLiteAssetHelper类复制数据库 [英] unable to copy database using SQLiteAssetHelper class
问题描述
我正在扩展SQLiteAssetHelper
类,以使用资产文件夹中的预填充数据库,但我的应用程序崩溃并给出错误,提示Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
.
I am extending SQLiteAssetHelper
class to use my pre-populated database from assets folder but my app crashed and gave an error saying Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
.
当我签入ddms
时,在data/data/com.sqlitetospinner1/
中没有数据库文件夹或我的db
文件.因此,为了进行测试,我创建了一个名为databases
的文件夹,并将db文件推入其中.此后,该应用程序开始正常运行.
When I checked in ddms
, there was no databases folder or my db
file in data/data/com.sqlitetospinner1/
. So to just test, I created a folder named databases
and pushed the db file into it. After this the app started to work perfectly.
这意味着我的AssetsHelper
类无法复制数据库.
It means my AssetsHelper
class failed to copy database.
AssetsHelper
类别:-
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>();
// Select All Query
String selectQuery = "SELECT * FROM colleges_list ORDER BY Organization_Name";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
colleges.add(cursor.getString(1));
} while (cursor.moveToNext());
}
// closing connection
cursor.close();
db.close();
// returning colleges
return colleges;
}
LogCat:-
08-25 08:41:21.927: W/SQLiteAssetHelper(27504): copying database from assets...
08-25 08:41:22.107: E/SQLiteAssetHelper(27504): Couldn't open mydb.sqlite for writing (will try read-only):
08-25 08:41:22.107: E/SQLiteAssetHelper(27504): com.readystatesoftware.sqliteasset.SQLiteAssetHelper$SQLiteAssetException: Missing databases/mydb.sqlite file (or .zip, .gz archive) in assets, or target folder not writable
08-25 08:41:22.107: E/SQLiteAssetHelper(27504): at android.content.res.AssetManager.openAsset(Native Method)
08-25 08:41:22.107: E/SQLiteAssetHelper(27504): at android.content.res.AssetManager.open(AssetManager.java:316)
08-25 08:41:22.107: E/SQLiteAssetHelper(27504): at android.content.res.AssetManager.open(AssetManager.java:290)
08-25 08:41:22.107: E/SQLiteAssetHelper(27504): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.copyDatabaseFromAssets(SQLiteAssetHelper.java:436)
08-25 08:41:22.107: E/SQLiteAssetHelper(27504): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.createOrOpenDatabase(SQLiteAssetHelper.java:400)
08-25 08:41:22.107: E/SQLiteAssetHelper(27504): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getWritableDatabase(SQLiteAssetHelper.java:176)
08-25 08:41:22.107: E/SQLiteAssetHelper(27504): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getReadableDatabase(SQLiteAssetHelper.java:254)
08-25 08:41:22.107: E/SQLiteAssetHelper(27504): at com.crm.AssetsHelper.getAllColleges(AssetsHelper.java:38)
08-25 08:41:22.107: E/SQLiteAssetHelper(27504): at dalvik.system.NativeStart.main(Native Method)
08-25 08:41:22.117: E/SQLiteLog(27504): (14) cannot open file at line 30191 of [00bb9c9ce4]
08-25 08:41:22.117: E/SQLiteLog(27504): (14) os_unix.c:30191: (2) open(/data/data/com.sqlitetospinner1/databases/mydb.sqlite) -
08-25 08:41:22.167: E/SQLiteDatabase(27504): Failed to open database '/data/data/com.sqlitetospinner1/databases/mydb.sqlite'.
08-25 08:41:22.167: E/SQLiteDatabase(27504): android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
08-25 08:41:22.167: E/SQLiteDatabase(27504): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
08-25 08:41:22.167: E/SQLiteDatabase(27504): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
08-25 08:41:22.167: E/SQLiteDatabase(27504): at com.crm.AssetsHelper.getAllColleges(AssetsHelper.java:38)
推荐答案
Missing databases/mydb.sqlite file (or .zip, .gz archive) in assets, or target folder not writable
assets/databases
文件夹中是否有数据库文件?
Do you have the database file in your assets/databases
folder?
否,仅在资产文件夹中
SQLiteAssetHelper
希望在assets
下的databases
文件夹中找到预填充的数据库文件.
SQLiteAssetHelper
expects to find the prepopulated database file in databases
folder under assets
.
这篇关于无法使用SQLiteAssetHelper类复制数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!