【问题标题】:Using existed SQLite database in Android在 Android 中使用现有的 SQLite 数据库
【发布时间】:2011-08-17 16:28:07
【问题描述】:

我的问题是在我的 android 应用程序中使用现有的 sqlite 数据库。 为了管理它,我使用了描述我的任务的著名文章 - http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications

当这个应用程序启动时,我收到了错误:

08-17 06:35:18.416: ERROR/Database(286): sqlite3_open_v2("data/data/com.jeston.existed.sqlite/databases/android_test_db.db", &handle, 1, NULL) failed
08-17 06:35:18.437: ERROR/AndroidRuntime(286): Uncaught handler: thread main exiting due to uncaught exception
08-17 06:35:18.457: ERROR/AndroidRuntime(286): android.database.sqlite.SQLiteException: unable to open database file 

我怀疑我使用了错误的 mydatabase 路径。我将我的 android_test_db 文件放到 assets 文件夹中,并且如博客中所写,给出了

private final static String DB_PATH = "data/data/com.jeston.existed.sqlite/databases/";
private final static String DB_NAME = "android_test_db.db";

那么,我的问题是这些路径是否正确?或者可能是,我的共同点是错误的?

谢谢大家。

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    db 扩展名必须与它完全一样。 此外,我认为您的主要问题是您指定了错误的包。它必须是根包。试试看:

    private final static String DB_PATH = "data/data/com.jeston.existed/databases/";
    

    【讨论】:

    • 似乎是,不 - 因为在此更改之后我遇到了错误:无法打开数据库文件。以经验的方式,我已经在我的方法中本地化了错误: public int getCountRecords() { Cursor c = myDB.query(DB_NAME, new String[] {"_id","name","age"}, null, null ,空,空,空);返回 c.getCount(); };此方法抛出异常 - 没有这样的表“android_test_table”
    • 哦,对了,但你为什么要查询 DB_NAME? query(...) 的第一个参数必须是表名。
    • 是的,你的权利,绝对正确。谢谢,问题在于我的第一个参数是数据库的名称而不是表的名称。
    【解决方案2】:

    openDataBase 方法应如下所示:

     public void openDataBase() throws SQLException{
        //Open the database
        String myPath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
    }
    

    使用SQLiteDatabase.NO_LOCALIZED_COLLATORS 而不是SQLiteDatabase.OPEN_READONLY

    【讨论】:

      猜你喜欢
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      相关资源
      最近更新 更多