2013-08-28 31 views
0

我正在使用sqlite4java來處理sqlite數據庫。我現在想從數據庫複製一個表到dbtest。所以我在這裏找到了代碼。但我總是有一個錯誤。首先,我打開我的新創建的數據庫的連接,並隨後附上了其他數據庫使用以下命令:sqlite4java通過附加另一個數據庫沒有這樣的表錯誤

ATTACH DATABASE database AS database;

這工作得很好。 dbtest已作爲新數據庫開放使用。 然後我想複製這些表格:因此,該表格已經創建,並且與其他數據庫中的相同。

INSERT INTO dbtest.Routing (id, source, destination, metadata, zone_src, zone_dst,cost) SELECT * FROM database.Routing;

但在執行此之後,我得到的錯誤:

com.almworks.sqlite4java.SQLiteException: [1] DB[1] exec() no such table: dbtest.Routing

我想它也使用SQLite Studio和有它工作沒有任何問題,但我不能附加數據庫存在(這樣做自動)。我必須使用另一種表示法來使用兩個數據庫嗎?

編輯: 我現在使用CL的答案。但是這導致了新的問題:

com.almworks.sqlite4java.SQLiteException: [1] DB[1] exec() no such table: second.Routing

我做了什麼改變?

ATTACH DATABASE database AS second; //new name for the database file and it will be attached as second, because if I use the debug function it says: Database second already in use.

如果我使用這個命令,我得到上面提到的錯誤。

INSERT INTO Routing (id, source, destination, metadata, zone_src, zone_dst,cost) SELECT * FROM second.Routing;

問題通過使用數據庫文件的絕對路徑解決。

回答

1

附加數據庫的名稱是而不是其文件名,但無論您在ATTACH語句的AS子句中指定的名稱如何。

主數據庫(附加其他數據庫的數據庫)的名稱也不是它的文件名。它的名字總是main

要指定主數據庫中表的名稱,請使用main.Routing,或者只使用Routing


請注意,SQLite是非常高興與創建一個新的數據庫,如果該文件不存在,所以你必須保證給予正確的文件名到ATTACH聲明。 如果您的數據庫文件未命名爲database或者它不在當前目錄中,則second數據庫將爲空。 強烈建議總是給出完整的文件路徑,如:

ATTACH DATABASE '/some/where/whatever.db' AS second; 
+0

我加上我現在想我的問題。 –

相關問題