2016-08-13 4 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

私は、Spring Framework 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ラッパーなしで使用しては少しトリッキー見つけるどちらがあります。

それらのラッパーのいくつか:

春のテストDbUnitをhttps://springtestdbunit.github.io/spring-test-dbunit/

Unitils DbUnitをhttp://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の依存関係は、spring-core,spring-beans,spring-tx、およびcommons-logging-1.2の合計が〜2.5MBであることに注意してください。これはSqlTool JARファイルの15倍を超えており、ScriptUtilsを使いやすくするために必要なDbUnit「ラッパー」も含まれていません。

+0

すべてのソリューション(SqlToolsを含む)は私が探していたものではありませんでした。 spring-jdbcと組み合わせたDbUnitはおそらくすべての私の問題を解決するでしょうが、sqliteデータベースで単体テストを実行するのはかなり重いです。私はプロトタイプのデータベースを使用して回避策を選択しました。これにより、テスト間で元の状態に素早く復元できます。 Sqliteはインメモリモードも提供しているので、これは本当に良い選択です。私の全データベーステストスイート(私が持っているすべてのDAOをテストする)は5秒未満で実行され、それはすべてのテスト間でデータベースがリセットされます。 –

関連する問題