Android SQLite数据库异常 - 代码14(无法打开数据库文件)

时间:2013-11-04 14:09:07

标签: android sqlite exception

我的Android应用程序中的数据库存在问题。我在不同数据库的许多地方都遇到了这个例外:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.logtomobile.gmbclient/com.logtomobile.gmbclient.TransactionHistoryActivity}: android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file (code 14)

我的所有数据库都在使用扩展SQLiteOpenHelper的单例类。我在使用后也关闭了所有游标。这种例外的原因是什么?我该怎么做才能解决这个问题?

在此异常之前,我得到了另一个SQLite异常:

(14) cannot open file at line 32473 of [00bb9c9ce4]
(14) os_unix.c:32473: (24) open(/data/data/com.logtomobile.gmbclient/databases/GmbDB-journal) 

我无法粘贴我的代码,因为每次在代码中的不同位置抛出此异常。所有数据库都在代码中创建,而不是从外部文件导入。所有对数据库进行查询的方法都是从DB Helpers中的synchronized方法调用的。在Helpers中有静态Helper实例(单例),whitch也有成员SQLiteDatabase对象。这些对象在Helper构造函数中由getWritableDatabase()初始化一次,并且keeped始终打开而不关闭它们。代码中的每个查询都在那些SQLiteDatabase对象上调用。

public synchronized static GmbDBHelper getInstance(Context context) {
    if (sHelper == null) {
        sHelper = new GmbDBHelper(context.getApplicationContext());
    }

    return sHelper;
}

private GmbDBHelper(Context context) {
    super(context, GmbDB.DB_NAME, null, DB_VERSION);

    mContext = context;
    mDatabase = getWritableDatabase();

    Log.d("DbHelper", "GmbDbHelper()");
}

synchronized SQLiteDatabase openDbForReading() {
    return mDatabase;
}

synchronized SQLiteDatabase openDbForWriting() {
    return mDatabase;
}

...

1 个答案:

答案 0 :(得分:0)

请检查清单中的权限。并添加以下内容以防您错过。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />