0

我当前的项目遇到了一个小问题。我正在做一个需要连接到 SQLite 数据库才能完成某些语句的 android 应用程序。我相信陈述等都很好,我唯一的问题是与数据库的连接不成功。

LogCat 错误:

04-18 08:20:30.688: E/Database(304): sqlite3_open_v2("jdbc:sqlite:res/raw/randomdb.db", &handle, 1, NULL) failed

所以到目前为止我连接数据库的代码是这样的:

String url = "jdbc:sqlite:res/raw/randomdb.db";
            SQLiteDatabase db;
            db = SQLiteDatabase.openDatabase(url, null, SQLiteDatabase.OPEN_READONLY);

如您所见,我正在尝试访问位于我的 project/res/raw 文件夹中的数据库。有没有人看到错误?

!!!更新!!! *我尝试使用 SQLiteOpenHelper,但仍然遇到一个我似乎无法解决的错误。这是我的新代码: *

public class DatabaseAdapter extends SQLiteOpenHelper {
    private static String dbPath= "data/data/com.YourPackageName/applicationDb/"; 
    private static String dbName = "YourDBName"; 
    private SQLiteDatabase applicationDatabase;  
    private final Context applicationContext;

    private boolean checkDataBase(){  
        File dbFile = new File( dbPath +  dbName);
        return dbFile.exists();
    }

    public void openDataBase() throws SQLException{
        String fullDbPath= dbPath + dbName;
        applicationDatabase = SQLiteDatabase.openDatabase( fullDbPath,null,SQLiteDatabase.OPEN_READONLY);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    }
}

我收到此错误: 默认构造函数未定义隐式超级构造函数 SQLiteOpenHelper()。必须定义一个显式构造函数有 什么想法吗?会很好!

4

3 回答 3

0

我认为您指定的路径不正确,因此如其他答案之一所述,找不到数据库。但是我从来没有使用过从文件夹openDatabase中读取的方法,raw所以我不知道哪个是正确的路径。

然而,曾几何时,我将数据库与我的应用程序一起交付。它驻留在assets文件夹中,一旦应用程序启动,我将它复制到私有应用程序存储中(很像任何使用SqliteOpenHelper. 从那时起,我使用通常的方式SqliteOpenHelper来访问数据库。

基本上为此,我遵循了这个线程中提到的博客,因为我的数据库文件大于 1MB,所以我使用了这个线程中描述的技术。希望将这两者结合起来,您将使您的数据库运行起来!

编辑顺便说一句,你错了,openDatabase不接受 url,但路径。

于 2012-04-18T09:18:39.510 回答
0

如果你想将你的 android 应用程序与 SQLite 数据库连接,那么你需要扩展 SQLiteOpenHelper

 public class AbcClass extends SQLiteOpenHelper

之后,您需要覆盖这些方法: onCreateonUpgrade 以及 AbcClass 的构造函数如下所示:

public AbcClass(Context context) {
    super(context, DB_NAME, null, VERSION); //public static final String DB_NAME = "test.sqlite";
}
于 2012-04-18T08:53:22.093 回答
0
    public boolean databaseExist()
    {
        File dbFile = new File(DB_PATH + DB_NAME);
        return dbFile.exists();
    }

This is the solution...

或者 - - - - - - - - - - - -

private boolean checkDataBase(){

    SQLiteDatabase checkDB = null;

    try{
        String myPath = DB_PATH + DB_NAME;
        checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

    }catch(SQLiteException e){

        //database does't exist yet.

    }

    if(checkDB != null){

        checkDB.close();

    }

    return checkDB != null ? true : false;
}
于 2012-04-18T08:53:27.240 回答