Android - 我可以在调试时看到数据,但log.cat显示错误:无法打开数据库错误

时间:2014-08-21 12:35:43

标签: android sqlite

我很困惑,我能够从数据库中看到信息,但是,我注意到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;
    }
}

2 个答案:

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