我使用checkDataBase函数来确保数据库是否已经存在,以避免每次在Oreo中打开应用程序时都重复复制该文件。但在安卓派( Android ),这是行不通的。
private boolean checkDataBase (String dbName, int dbVersion) {
SQLiteDatabase checkDB = null;
try {
String myPath = DB_PATH + dbName;
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.CONFLICT_ABORT);
if (checkDB.getVersion() < dbVersion) {
Timber.d("Delete database called");
myContext.deleteDatabase(dbName);
return false;
}
} catch(SQLiteException e) {
}
if(checkDB != null){
checkDB.close();
}
return checkDB != null;
}获取此错误: open(/data/data/my.androidPieTrial.app/databases/admin.db):(2) android.database.sqlite.SQLiteCantOpenDatabaseException:未知错误(代码14 SQLITE_CANTOPEN):无法打开数据库
发布于 2018-08-22 05:54:48
我找到解决办法了。在Android和下面的版本中,我访问db的方式很好,但在Android中,不是working.This,而是在Android中处理它的方式。
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
MySQLiteOpenHelper helper = new MySQLiteOpenHelper();
SQLiteDatabase database = helper.getReadableDatabase();
myPath = database.getPath();
} else {
String DB_PATH = Environment.getDataDirectory() + "/data/my.trial.app/databases/";
myPath = DB_PATH + dbName;
}
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
checkDB.disableWriteAheadLogging();发布于 2019-05-23 06:06:42
覆盖android饼操作系统版本的SQLiteOpenHelper类上的以下方法。
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
db.disableWriteAheadLogging();
}
}发布于 2019-01-10 11:08:31
context.getDatabasePath(the_database_name).getPath();工作正常,因为getDatabasePath()返回数据库创建的文件系统上的绝对路径。适用于所有版本的android
https://stackoverflow.com/questions/51930153
复制相似问题