SQLiteCantOpenDatabaseException

时间:2017-03-24 13:58:58

标签: android database sqlite

创建数据库时出现SQLiteCantOpenDatabaseException错误。

 Fatal Exception: java.lang.RuntimeException: Unable to create application com.StampWallet.StampwalletApp: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4715)
       at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(XposedBridge.java)
       at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:334)
       at android.app.ActivityThread.handleBindApplication(<Xposed>)
       at android.app.ActivityThread.-wrap1(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:5422)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
       at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102)
Caused by android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
       at android.database.sqlite.SQLiteConnection.nativeOpen(SQLiteConnection.java)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:207)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:191)
       at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
       at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806)
       at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)
       at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
       at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:571)
       at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:269)
       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
       at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
       at com.packageName.database.DatabaseManager.openDatabase(DatabaseManager.java:37)
       at com.packageName.MYApplicationFile.onCreate(StampwalletApp.java:210)
       at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4712)
       at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(XposedBridge.java)
       at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:334)
       at android.app.ActivityThread.handleBindApplication(<Xposed>)
       at android.app.ActivityThread.-wrap1(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:5422)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
       at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102)

感谢任何帮助..

MyApplication File

@Override
    public void onCreate() {
        super.onCreate();
        //open database instance which will be used throughout application
        try {
            DatabaseManager.initializeInstance(new DatabaseHelper(this));
            DatabaseManager.getInstance().openDatabase();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

@Override
    public void onTerminate() {
        //close database on terminate application
        DatabaseManager.getInstance().closeDatabase();
        super.onTerminate();
    }

数据库助手

public class DatabaseHelper extends SQLiteOpenHelper {
    // Database Name
    private static final String DATABASE_NAME = "MyDB";
    // Database Version
    private static final int DATABASE_VERSION = 25;
    private Context context;

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.context = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // create table queries here
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // upgrade table queries here
    }



}

数据库管理员

public class DatabaseManager {
    private AtomicInteger mOpenCounter = new AtomicInteger();

    private static DatabaseManager instance;
    //private static SQLiteOpenHelper mDatabaseHelper;
    private static DatabaseHelper mDatabaseHelper;
    private SQLiteDatabase mDatabase;

    public static synchronized void initializeInstance(DatabaseHelper helper) {
        if (instance == null) {
            instance = new DatabaseManager();
            mDatabaseHelper = helper;
        }
    }

    public static synchronized DatabaseManager getInstance() {
        if (instance == null) {
            throw new IllegalStateException(DatabaseManager.class.getSimpleName() +
                    " is not initialized, call initializeInstance(..) method first.");
        }

        return instance;
    }

    public synchronized SQLiteDatabase openDatabase() {
        if (mOpenCounter.incrementAndGet() == 1) {
            // Opening new database
            mDatabase = mDatabaseHelper.getWritableDatabase();
        }
        return mDatabase;
    }

    public synchronized void closeDatabase() {
        if (mOpenCounter.decrementAndGet() == 0) {
            // Closing database
            mDatabase.close();
        }
    }


}

0 个答案:

没有答案