我的当前项目遇到了一些问题。我正在做一个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()。必须定义显式构造函数 有任何想法吗?太棒了!
答案 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)
我认为您指定的路径不正确,因此在其他一个答案中提到的数据库未找到。但是我从未使用方法openDatabase
从raw
文件夹中读取,因此我不知道哪条路径是正确的。
然而,曾几何时我将数据库与我的应用程序一起发货。它位于assets
文件夹中,一旦应用程序启动,我就将其复制到私有应用程序存储中(非常类似于使用SqliteOpenHelper
创建的任何数据库)。从那时起,我使用SqliteOpenHelper
的常规方式访问数据库。
基本上为此我遵循了此thread中提到的博客,因为我的数据库文件大于1MB,所以我使用了此thread中描述的技术。希望将这两者结合起来,您的数据库将会运行!
编辑如果你错了,openDatabase
不接受网址,而是路径。