Android SQLite数据库连接不成功

时间:2012-04-18 08:44:51

标签: android database sqlite connection

我的当前项目遇到了一些问题。我正在做一个Android应用程序,需要连接到SQLite数据库来处理一些语句。我相信语句等都很好,我唯一的问题是与数据库的连接不成功。

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文件夹中的数据库。有没有人看到这个错误?

!!! UPDATE !!! * 我试图采用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()。必须定义显式构造函数 有任何想法吗?太棒了!

3 个答案:

答案 0 :(得分:0)

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

 public class AbcClass extends SQLiteOpenHelper

之后你需要覆盖这些方法: onCreate onUpgrade 和AbcClass的构造函数看起来像:

public AbcClass(Context context) {
    super(context, DB_NAME, null, VERSION); //public static final String DB_NAME = "test.sqlite";
}

答案 1 :(得分:0)

    public boolean databaseExist()
    {
        File dbFile = new File(DB_PATH + DB_NAME);
        return dbFile.exists();
    }

This is the solution...

OR -----------------------

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;
}

答案 2 :(得分:0)

我认为您指定的路径不正确,因此在其他一个答案中提到的数据库未找到。但是我从未使用方法openDatabaseraw文件夹中读取,因此我不知道哪条路径是正确的。

然而,曾几何时我将数据库与我的应用程序一起发货。它位于assets文件夹中,一旦应用程序启动,我就将其复制到私有应用程序存储中(非常类似于使用SqliteOpenHelper创建的任何数据库)。从那时起,我使用SqliteOpenHelper的常规方式访问数据库。

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

编辑如果你错了,openDatabase不接受网址,而是路径。