2016-08-13 97 views
0

我想測試使用SQLite JDBC驅動程序的手寫DAO。我的計劃是將模式和數據插入的版本控制保存爲.sql文件,並在測試之前執行它們以獲取可用於測試的填充數據庫。使用JDBC執行.sql文件

搜索使用JDBC執行整個sql腳本的解決方案時,出現了一堆Stackoverflow線程,說這是不可能的,並提供了一些將sql腳本拆分爲單獨的sql語句(SQLScriptRunner)的解析腳本。

這些帖子主要是3歲以上,所以我想知道是否仍然沒有「簡單」的方式來執行使用JDBC API的SQL腳本。

我在問,因爲SQLite爲我提供了一個從現有數據庫克隆數據庫的選項,我希望使用一個大的Script-Executer實現(執行器可能比我的所有數據訪問代碼更大)。

那麼,有沒有一個容易的方法來使用JDBC執行sql腳本,還是隻能使用一些解析腳本?

+3

不,沒有。 – OldProgrammer

回答

1

我想春季框架ScriptUtils可能會爲你做這個技巧。

請檢查

http://docs.spring.io/autorepo/docs/spring/4.0.9.RELEASE/javadoc-api/org/springframework/jdbc/datasource/init/ScriptUtils.html

我的計劃是保留的模式和數據插入版本控制 爲.sql文件,並在測試之前執行他們得到一個人口 數據庫,我可以用於測試。

爲此有作爲DbUnit的http://dbunit.sourceforge.net/

,我個人覺得有點棘手沒有propper包裝使用這些庫。

其中一些包裝的:

彈簧試驗的DbUnithttps://springtestdbunit.github.io/spring-test-dbunit/

Unitils的DbUnithttp://www.unitils.org/tutorial-database.html

+0

我看到DbUnit在其他文章中被提及很多,如果我有更多的數據庫代碼需要在將來測試,我可能會使用它。 Spring看起來非常好,但Spring對於ScriptLoader來說是一個非常大的依賴。我可能會重構我的應用程序以在未來使用更大的框架 - 如果是Spring,我將利用它! –

+1

Spring Framework是**高度模塊化的**項目。該類位於** spring-jdbc **模塊內部,該模塊還包含許多用於jdbc代碼的有用類。 JdbcTemplate和NamedParameterJdbcTemplate只是很好的類,你應該在你的DAO類中使用。他們處理關閉/打開連接,提供了很多有用的方法,例如queryForObject,queryForList,並且通常會使寫入jdbc代碼更愉快。你應該考慮使用它! –

+0

我不知道它被分裂了,謝謝你提及! –

0

雖然不是一個 「開箱即用」 JDBC的解決方案,我會傾向於使用SqlTool。它對HSQLDB特別友好,但可用於(幾乎?)任何JDBC驅動程序。 (該文檔顯示瞭如何與PostgreSQL,SQL Server,Oracle,Derby等連接的示例)它可通過Maven獲得,JAR文件僅爲〜150KB。有關如何使用它運行SQL腳本的示例,請參閱我的其他答案here

關於擬議的春天「ScriptUtils」在你的問題的意見的光解決方案...

我寧願[一些其他的解決方案]在使用大腳本的執行器執行(執行者大概會比我的所有數據訪問代碼都大)。

...請注意,spring-jdbc的依存關係包括總共爲〜2.5MB的spring-core,spring-beans,spring-txcommons-logging-1.2。這比SqlTool JAR文件大15倍,它甚至不包含任何額外的DbUnit「包裝器」,可能或不需要使ScriptUtils更易於使用。

+0

所有解決方案(包括SqlTools)都不是我正在尋找的。 DbUnit與spring-jdbc結合起來可能會解決我所有的問題,但僅在sqlite數據庫上運行某些單元測試的權重相當大。我選擇了一種使用原型數據庫的解決方法,可以在測試之間快速恢復到原始狀態。 Sqlite還提供了一個內存模式,這使得這是一個非常好的選擇。我的整個數據庫測試套件(測試每個DAO)都在5秒內運行,並且在每次測試之間都會重置數據庫。 –