简体   繁体   English

无法使用SQLiteAssetHelper打开存储在资产\\数据库中的SQLite数据库

[英]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问题,但对我的情况没有一个帮助。

UPDATE:- It used to work earlier but after I changed my db file with another db it stopped working. 更新:它曾经可以更早地工作,但是在我用另一个数据库更改了我的数据库文件之后,它停止了工作。

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.

相关问题 如何将新列或表添加到资源中预先填充的sqlite数据库并使用SQLiteAssetHelper - How to add a new column or table to sqlite database pre-populated in the assets and using SQLiteAssetHelper 无法使用SQLiteAssetHelper类复制数据库 - unable to copy database using SQLiteAssetHelper class 无法使用SQLiteAssetHelper更新android中的数据库 - Unable to update database in android using SQLiteAssetHelper 使用SQLiteAssetHelper从资产复制数据库 - Copying database from assets with SQLiteAssetHelper 使用sqliteassethelper的两个预打包数据库 - Two prepackaged databases using sqliteassethelper 使用SQLiteAssetHelper写入数据库 - Writing to a Database Using SQLiteAssetHelper 无法将资源/数据从存储在资产文件夹中的 SQLite 数据库复制到 /data/data/com.example.mohsinbhat.examsystem/databases/computer.db - Unable to Copy Resources/data from SQLite Database stored in assets folder to /data/data/com.example.mohsinbhat.examsystem/databases/computer.db Sqlite错误:无法打开数据库“/data/data/PackageName/databases/SampleDB.db”:无法打开数据库文件 - Sqlite error: unable to open database “/data/data/PackageName/databases/SampleDB.db”: unable to open database file 如何使用数据库中存储的路径打开资产文件夹中的文件? - How to open a file in the assets folder using a path stored in the database? 直接从资产文件夹打开SQLite数据库 - Open SQLite Database directly from assets folder
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM