2010-01-20 74 views
4

我正在使用帶有DAO模式的Spring JdbcTemplate來訪問數據庫。而不是手動創建數據庫表,我正在尋找一種方法來生成DAO層中的表。 據我所知,我可以使用JdbcTemplate執行語句,我只是在尋找合適的地方去做它。Spring JDBC:如何創建表?

是否有最佳做法?

+4

以編程方式創建表是一種氣味。在現實世界中(並且具有良好的數據模型),您通常只需創建一次表並永久使用它們。你確定**你需要這樣做嗎?如果沒有,請發表一個新的問題如何更改數據模型,以便您不需要爲每個打嗝創建新表格。 – BalusC 2010-01-20 14:21:09

+0

+1爲BalusC。如果你想要一個可重複的自動創建表的方式,創建一個DDL或其他腳本,可以在你的環境被設置時執行。換句話說,這不應該在代碼中處理。 – Droo 2010-01-20 15:32:30

+0

@BalusC,執行DDL設置的邏輯地點可能是安裝操作,它可能作爲代碼的一部分進行分發 - 爲什麼要添加除當前DAO之外的其他內容來處理這個通常必需的步驟? – 2010-01-21 22:15:43

回答

2

稍微offtopic:

是不是絕對必要的,你需要執行從代碼中的DDL命令?事實上,我認爲將db admin和db用法分開是個好主意。我們的Oracle數據庫安全設置實際上是爲了使用不同的數據庫用戶(DB_OWNER)設置的,而不是運行SELECT,INSERT和DELETE的DB_USER運行的。

這可以防止意外刪除表或修改架構,還允許設置DB_USER,以便只授予絕對必需的特權,這會增加一層安全性。我想這取決於你的服務/應用程序的性質,但考慮在代碼中創建表的好處(以及DDL代碼中可能的錯誤是否會偶然地破壞生產數據)。

+0

謝謝你的好建議! – 2010-01-20 13:43:52

+0

是的,同意這一點,我們曾經有DB_USER,它只能選擇和調用PROCEDURE,所以如果黑客以某種方式竊取usernam/pass(由web上暴露的應用程序使用),他們只能從數據庫中選擇它。 ..或者他們可以調用存儲過程,它將處理之前的檢查並插入一些將使數據庫保持一致狀態的東西,因此損害會更小 – 2010-01-20 13:52:03

+0

假設您正在進行全新安裝,是否會分發另一個應用程序來運行您的DDL ,還是捆綁DDL並在應用程序中安裝邏輯? – 2010-01-21 22:17:29

0

使用.update()方法可用於(Simple)JdbcOperations,它們返回的數字是受影響的行數。他們應該專門用於INSERTUPDATE陳述。

+0

他問的是如何創建一個表格,而不是如何更新一個 – 2010-01-20 13:34:11

+0

'.update()'也適用於這些表格。基本上所有其他方法都是用於SELECT的,'.update()'用於其他所有內容。 – Esko 2010-01-20 14:07:45

6

可以使用execute(String) method

public void execute(String sql) throws DataAccessException 

發出單個SQL執行,通常DDL語句。
指定者:執行接口JdbcOperations

參數:sql - 靜態SQL執行

拋出:DataAccessException的 - 如果有任何問題

然而,由於beny23提到我會很可疑的實際需要在實時應用程序中以編程方式執行此操作。

+0

2個字:集成測試 – rsenna 2016-10-24 17:04:01