获得;sqlite3“u open”v2(“mydatabase.db”和“handle,6,NULL)失败”;在Android中使用sqlcipher之后

获得;sqlite3“u open”v2(“mydatabase.db”和“handle,6,NULL)失败”;在Android中使用sqlcipher之后,android,sqlcipher,Android,Sqlcipher,在Android 2.3.3中使用sqlcipher时。我犯了一个错误 这是我的DB.java类 import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.util.Log; import net.sqlcipher.database.SQLiteDatabase; import net.sqlcipher.databas

在Android 2.3.3中使用sqlcipher时。我犯了一个错误

这是我的DB.java类

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.util.Log;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteDatabase.CursorFactory;
import net.sqlcipher.database.SQLiteOpenHelper;

public class DB {

private static String _DB_NAME = "mydatabase.db";
private static int _DB_VERSION = 1;

private Context _context;
private DBHelper _helper;

public DB(Context context) {
SQLiteDatabase.loadLibs(context);
this._context = context;
this._helper = new DBHelper(this._context, _DB_NAME, null, _DB_VERSION);
SQLiteDatabase sqdb = this._helper.getWritableDatabase("123");
sqdb.close();
}

public void insertValuesInTable() {

try {
SQLiteDatabase sqdb = SQLiteDatabase.openOrCreateDatabase(_DB_NAME, "123",null);
sqdb.execSQL("insert into mytable(category, total) values (1,"100");");
sqdb.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static class DBHelper extends SQLiteOpenHelper {

        public DBHelper(Context context, String name, CursorFactory factory,
                int version) {

            super(context, name, factory, version);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {

            createTables(db);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        }

        private void createTables(SQLiteDatabase db) {

            try {
                String query1;

                query1 = "Create table if not exists mytable (category integer primary key, total text) ;   ";
                db.execSQL(query1);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


}
我创建了DB.java对象,并像这样使用它

DB _db = new DB(getApplicationContext());
_db.insertValuesInTable();
只要我执行这一行
\u db.insertValuesInTable()我得到这个错误

sqlite returned: error code = 14, msg = cannot open file at line 32288 of [6d326d44fd]
sqlite returned: error code = 14, msg = os_unix.c:32288: (2) open(//mydatabase.db) - 
sqlite3_open_v2("mydatabase.db", &handle, 6, NULL) failed
net.sqlcipher.database.SQLiteException: unable to open database file
net.sqlcipher.database.SQLiteDatabase.dbopen(Native Method)
net.sqlcipher.database.SQLiteDatabase.<init>(SQLiteDatabase.java:1952)
net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:902)
net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:945)
com.keane.database.DB.insertValuesInMd5Check(DB.java:133)
com.keane.test2.UsageMonitorTestActivity.onCreate(UsageMonitorTestActivity.java:45)
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
android.app.ActivityThread.access$1500(ActivityThread.java:117)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loop(Looper.java:123)
android.app.ActivityThread.main(ActivityThread.java:3683)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:507)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
dalvik.system.NativeStart.main(Native Method)
sqlite返回:错误代码=14,msg=无法打开[6d326d44fd]第32288行的文件
sqlite返回:错误代码=14,msg=os_unix.c:32288:(2)打开(//mydatabase.db)-
sqlite3_open_v2(“mydatabase.db”,&handle,6,NULL)失败
net.sqlcipher.database.SQLiteException:无法打开数据库文件
net.sqlcipher.database.SQLiteDatabase.dbopen(本机方法)
net.sqlcipher.database.SQLiteDatabase.(SQLiteDatabase.java:1952)
net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:902)
net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:945)
com.keane.database.DB.insertValuesInMd5Check(DB.java:133)
com.keane.test2.usageMonitorStativity.onCreate(usageMonitorStativity.java:45)
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
access$1500(ActivityThread.java:117)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
android.os.Handler.dispatchMessage(Handler.java:99)
Looper.loop(Looper.java:123)
main(ActivityThread.java:3683)
java.lang.reflect.Method.Invokenactive(本机方法)
java.lang.reflect.Method.invoke(Method.java:507)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
dalvik.system.NativeStart.main(本机方法)

我已经正确地包括了所有的
.so
.jar
.zip
文件。但是我还是遇到了这个错误。如何解决这个问题?

您应该创建一个
android.app.Application
的子类,并将其注册到您的
AndroidManifest.xml
文件中。在调用
SQLiteDatabase.openOrCreateDatabase
之前,通过从应用程序实例调用
getDatabasePath
获取数据库文件的完整路径,并将该值传递给
SQLiteDatabase.openOrCreateDatabase