安卓-我可以看到的数据,当我调试,但日志.Cat显示错误:无法打开数据库错误



我很困惑,我能够从数据库中看到信息,但是,我注意到log.cat

中显示了一个错误代码

同样,带有getReadableDatabase的页面也很好。但对于getWritableDatabase,它会断裂。


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

下面是我的一个示例方法,展示了它通常是如何工作的:

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路径,最好使用:

db.getPath();

数据库自动创建在Databases文件夹

我编辑了我的帖子并添加了答案,但只是为了方便阅读

这是我的答案

只是将实际的数据库名称添加到路径的末尾,在我的例子中是

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

相关内容

最新更新