2010-05-26 62 views
1

我有一個Java應用程序,它使用JDBC將舊數據格式的數據加載到SQLite數據庫中。如果指定的數據庫文件不存在,則應該創建一個新文件。目前數據庫的模式在應用程序中被硬編碼。我寧願將它作爲一個SQL腳本放在單獨的文件中,但顯然,通過JDBC執行SQL腳本並不容易。有沒有其他方式或模式來實現這樣的事情?使用JDBC創建數據庫模式的模式

回答

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

謝謝你的解決方案,好像我會用這個去的。不過,我希望有某種感覺不那麼黑客的方式。 – 2010-05-26 16:37:38

0

「正確」的方式是使用Hibernate。在所有其他好處中,它能夠自動創建/更新數據庫模式(SO1,SO2)。

0

如果您在開發環境中工作,我會建議您使用像Hibernate這樣的ORM工具,根據您的Java域模型轉發工程師來創建數據庫表。 Hibernate具有自動創建/更新表的功能,以防數據庫模式發生變化。

當你正在使用SQLite,你可以看看Hibernate for SQLite

我已經讀的地方,它不建議使用此功能在生產環境中,因爲增量表創建可能會在現有的數據產生負面影響。