我有一個Java應用程序,它使用JDBC將舊數據格式的數據加載到SQLite數據庫中。如果指定的數據庫文件不存在,則應該創建一個新文件。目前數據庫的模式在應用程序中被硬編碼。我寧願將它作爲一個SQL腳本放在單獨的文件中,但顯然,通過JDBC執行SQL腳本並不容易。有沒有其他方式或模式來實現這樣的事情?使用JDBC創建數據庫模式的模式
1
A
回答
4
你一句「現在有簡單的方法,雖然JDBC來執行SQL腳本」搞糊塗了一分鐘,但我認爲你說的「有沒有簡單的方法」。 :)
根據別人的說法,是的......完美的世界場景是使用像Hibernate這樣的ORM工具,但是我也明白當你在工作中處理遺留問題時,你的團隊可能會不想花太多時間重構該項目。
我同意你應該將數據庫模式重構成單獨的文件。您可以使用JDBC實際執行SQL腳本。當我運行某些測試案例時,我一直這樣做。
下面是我如何做到這一點。我使用SQL Server數據庫。所以,你需要調整代碼以適應你的需求。
String ddl = ... // load your SQL script file into this string
String delimiter = "GO"; // in my case, SQL Server uses GO as delimiter, you use whatever you want here.
private void executeDDL(String ddl, String delimiter) {
Connection con = null;
try {
con = ... // get the connection
// enable transaction
con.setAutoCommit(false);
Statement statement = con.createStatement();
// for every DDL statement, execute it
for (String sql : ddl.split(delimiter)) {
if (StringUtils.isNotBlank(sql)) {
statement.executeUpdate(sql);
}
}
statement.close();
con.commit();
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
con.close();
}
catch (Exception ignored) {
}
}
}
0
0
如果您在開發環境中工作,我會建議您使用像Hibernate這樣的ORM工具,根據您的Java域模型轉發工程師來創建數據庫表。 Hibernate具有自動創建/更新表的功能,以防數據庫模式發生變化。
當你正在使用SQLite,你可以看看Hibernate for SQLite
我已經讀的地方,它不建議使用此功能在生產環境中,因爲增量表創建可能會在現有的數據產生負面影響。
相關問題
- 1. 創建數據庫模式
- 2. 使用jdbc創建db2模式
- 3. 使用MySQL Workbench從現有模式/模型創建數據庫
- 4. 創建模式時指定數據庫
- 5. 從DataTable創建數據庫模式
- 6. Flyway:init不會創建模式數據庫
- 7. 實時創建數據庫模式
- 8. 錯誤創建oozie數據庫模式
- 9. 數據庫模式比較 - 創建表
- 10. 使用JDBC連接到不同數據庫的模式
- 11. 從應用程序模型創建數據庫模式與否?
- 12. 嵌入式OrientDB分佈式模式 - 未能創建數據庫
- 13. 從電影數據庫創建數據庫模式
- 14. 使用docker-compose創建一個MySQL模式/數據庫
- 15. 如何使用浮油創建數據庫模式?
- 16. Codeigniter 3 - 如何使用Forge Class創建數據庫模式?
- 17. 創建使用JSON模式
- 18. 數據庫模式
- 19. 數據庫模式
- 20. 使用模板模式創建數據訪問層
- 21. 使用SQLAlchemy的Oracle數據庫模式
- 22. 春季啓動。 @DataJpaTest H2嵌入式數據庫創建模式
- 23. 以編程方式創建Oracle數據庫和模式ADO.NET
- 24. MVC倉庫模式:創建模型類
- 25. 根據模式創建數據文件
- 26. 數據庫模式的建議值
- 27. Mongoose:建議的數據庫模式
- 28. 創建數據庫文件,無數據/模式
- 29. 爲大型數據集創建MySQL數據庫模式
- 30. 數據庫模式庫
謝謝你的解決方案,好像我會用這個去的。不過,我希望有某種感覺不那麼黑客的方式。 – 2010-05-26 16:37:38