首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Android中打开数据库(Android 9)

无法在Android中打开数据库(Android 9)
EN

Stack Overflow用户
提问于 2018-08-20 11:50:22
回答 3查看 8.3K关注 0票数 6

我使用checkDataBase函数来确保数据库是否已经存在,以避免每次在Oreo中打开应用程序时都重复复制该文件。但在安卓派( Android ),这是行不通的。

代码语言:javascript
复制
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):无法打开数据库

EN

回答 3

Stack Overflow用户

发布于 2018-08-22 05:54:48

我找到解决办法了。在Android和下面的版本中,我访问db的方式很好,但在Android中,不是working.This,而是在Android中处理它的方式。

代码语言:javascript
复制
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();
票数 12
EN

Stack Overflow用户

发布于 2019-05-23 06:06:42

覆盖android饼操作系统版本的SQLiteOpenHelper类上的以下方法。

代码语言:javascript
复制
@Override
public void onOpen(SQLiteDatabase db) {
    super.onOpen(db);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        db.disableWriteAheadLogging();
    }
}
票数 4
EN

Stack Overflow用户

发布于 2019-01-10 11:08:31

代码语言:javascript
复制
context.getDatabasePath(the_database_name).getPath();

工作正常,因为getDatabasePath()返回数据库创建的文件系统上的绝对路径。适用于所有版本的android

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51930153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档