2016-02-28 56 views
0

我的應用程序使用嵌入式Java DB。 A similar question詢問如果目標數據庫尚不存在,如何創建Java DB;加入create=true屬性產生期望的結果,例如:如何覆蓋Java DB?

 conn = DriverManager.getConnection("jdbc:derby:mydatabase;create=true",props); 

但我想覆蓋數據庫(如果存在)。我想我可以簡單地刪除並重新創建數據庫的父目錄。有更好的解決方案嗎?

+0

我不認爲你應該直接刪除/重新創建目錄。數據庫必須在某個目錄(數據字典)表中維護關於數據庫的元數據 - 可能會失效。你可以簡單地截斷所有的表格。我不知道你有多少表或記錄。這很多嗎? –

回答

1

嵌入式Derby數據庫完全包含在文件系統的數據庫文件夾中,因此刪除該文件夾並使用create=true重新創建數據庫將會非常好。

對於數據庫中的所有表(以及索引,視圖等)發出DROP TABLECREATE TABLE語句也是完全正常的。

兩種方法都可以實現結果。哪一個是您的應用程序的「更好的解決方案」真的取決於您。在我的應用程序中,我傾向於將表/索引/視圖/約束DDL語句與應用程序邏輯本身分開,而且我傾向於將這些DDL語句的集合構造爲冪等的;也就是說,那些DDL語句總是以刪除之前的table/view/index/etc開始。對象,然後創建新的對象,這樣我就可以在應用程序開發過程中隨時運行這些DDL語句,從頭開始重新創建我的數據庫對象。

但是,您的應用程序可能不是這樣的結構,在這種情況下,您可能會發現物理刪除整個目錄文件夾更容易。