我很困惑,我能够从数据库中看到信息,但是,我注意到log.cat中显示了错误代码
此外,getReadableDatabase
罚款的页面。
但是对于getWritableDatabase
,它会中断。
但这个错误在logcat中显示两种情况......
1342-1342/com.package/SQLiteDatabase﹕ Failed to open database 'data/data/com.package/databases/'
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14):Could not open database
=============================================== ==================================
public Database(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
DATABASE_PATH = "data/data/com.package/databases/";
db = getWritableDatabase();
}
@Override
public synchronized SQLiteDatabase getWritableDatabase() {
try {
if (db != null) {
if (db.isOpen()) {
return db;
}
}
return SQLiteDatabase.openDatabase(DATABASE_PATH, null, SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.NO_LOCALIZED_COLLATORS);
} catch (Exception e) {
return null;
}
}
答案 0 :(得分:0)
以下是我的一个示例方法,它显示了它的工作原理:
private SQLiteDatabase db;
public String getDbPath() {
return db.getPath();
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_DB);
}
catch (SQLException e) {
if (Constant.DEBUG)
Log.e(TAG, e.toString());
}
}
public void writeInDb(String sql) {
if (db == null || !db.isOpen())
db = getWritableDatabase();
try {
db.execSQL(sql);
}
catch (SQLException e) {
if (Constant.DEBUG)
Log.e(TAG, e.toString());
}
}
此外,我不需要硬编码数据库路径,更好地使用:
db.getPath();
自动在Databases
文件夹
答案 1 :(得分:0)
我编辑了我的帖子并添加了答案,但只是为了方便阅读
这是我的回答
只需将实际的数据库名称添加到路径的末尾,在我的情况下
DATABASE_NAME = database.sqlite
所以我从这个改变它
public Database(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
DATABASE_PATH = "data/data/com.package/databases/";
db = getWritableDatabase();
}
到这个
public Database(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
DATABASE_PATH = "data/data/com.package/databases/database.sqlite";
db = getWritableDatabase();
}