2012-10-29 65 views
1

我有一個附加數據庫的問題,並將附加數據庫中的所有行插入到main中。在Java中附加Sqlite數據庫

這是我的代碼。

public void selectOldDb(String dbName) throws Exception { 
    createNewDB(); 
    Class.forName("org.sqlite.JDBC"); 

    Connection connOldDb = DriverManager.getConnection("jdbc:sqlite:"+ dbName); 
    String newDbName = getDirToNewDb(); 

    newDbName = newDbName + "auftraege.db"; 
    Connection connNewDb = DriverManager.getConnection("jdbc:sqlite:"+ newDbName); 

    connNewDb.prepareStatement("ATTACH DATABASE \"" + connOldDb + "\" AS fromDB").execute(); 

    connNewDb.prepareStatement("INSERT INTO main.auftraege SELECT * FROM fromDB.SendeDS").execute(); 

    connNewDb.close(); 
    connOldDb.close(); 
} 

當我嘗試插入時出現此錯誤。

[SQLITE_ERROR] SQL錯誤或丟失的數據庫(沒有這樣的表: fromDB.SendeDS)

我在做什麼錯?

+0

我看到兩種可能性:1)表不存在,在這種情況下,您需要創建它,2)數據庫或表名中存在拼寫錯誤。 –

+0

感謝您的回答。桌子在那裏。我在連接後用結果集對它進行了測試。但是,你打字錯誤是什麼意思? – user1761808

+0

通過拼寫錯誤,我的意思是你應該仔細檢查'SendeDS'實際上是你試圖查詢的表的名稱。由於我是母語爲英語的人,因此我認爲您可能意味着要麼使用「SendDS」,要麼使用「SenderDS」。當你知道**應該是什麼時,這樣的錯別字很容易被忽視。我只是建議你仔細檢查一下。 –

回答

2

ATTACH DATABASE命令需要一個文件名,但您給它一個Connection對象的表示形式。

您不需要connOldDb,只需使用dbName來代替。

+0

非常感謝。這很容易,而且工作正常。這裏是我的新代碼:connNewDb.prepareStatement( \t \t「ATTACH DATABASE'」+ dbName +「'fromDB」)。execute(); – user1761808

+0

你甚至需要打開一個連接到舊數據庫的連接嗎? – Tacitus86

+0

@ Tacitus86引用答案,「你不需要'connOldDb'」。 –