2014-09-12 61 views
0

我有兩個數據庫Mydb.dbUpdatedb.db。這些具有相同的結構,並且兩者具有相同的Table1從附加數據庫合併兩個Sqlite數據庫和轉儲數據(無法打開數據庫)

我想將Updatedb.db中的所有記錄添加到Table1

大約有25000條記錄需要更新。

我用:

mDataBase.openDataBaseForWrite(); 
    SQLiteDatabase myInternalDatabase = mDataBase.getDb(); 
    myInternalDatabase.execSQL("ATTACH DATABASE '" + ATTACH_DB_PATH 
      + File.separator + ATTACH_DB_NAME + "' AS New_DB"); 

    myInternalDatabase 
      .execSQL("INSERT INTO ResultMaster SELECT * FROM New_DB.ResultMaster;"); 

我得到這個異常:

09-16 14:44:32.584: E/AndroidRuntime(2766): FATAL EXCEPTION: main 
09-16 14:44:32.584: E/AndroidRuntime(2766): android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database: /mnt/sdcard/AttachDb/backupname.db (code 14) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:727) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1665) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at com.attachtwodatabase.MainActivity.attachDatabase(MainActivity.java:62) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at com.attachtwodatabase.MainActivity.access$0(MainActivity.java:59) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at com.attachtwodatabase.MainActivity$1.onClick(MainActivity.java:49) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at android.view.View.performClick(View.java:4207) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at android.view.View$PerformClick.run(View.java:17372) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at android.os.Handler.handleCallback(Handler.java:725) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at android.os.Looper.loop(Looper.java:137) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at java.lang.reflect.Method.invoke(Method.java:511) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
09-16 14:44:32.584: E/AndroidRuntime(2766):  at dalvik.system.NativeStart.main(Native Method) 

我在做什麼錯?

INSERT INTO table1 SELECT * FROM attacheddb.table1; 

做它例如:

+2

除非您努力嘗試自己,並有問題併發布一些代碼。沒有人會幫助你。還需要 – Budius 2014-09-12 10:09:43

回答

4

ATTACH的從數據庫附加到目標數據庫合併到目標數據庫插入記錄在anynctask預防ANR。

還需要更新一個已經存在

對於過您可以指定一個解決衝突的戰略項目,例如

INSERT ... ON CONFLICT REPLACE; 
+0

來更新已存在的條目。 – 2014-09-12 10:11:55

+0

請檢查更新。 – 2014-09-16 09:21:22