Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

JavaからApache Derbyのインポート・エクスポートを行う

1月はAzureやTwitter4Jなど、仕事ネタより遊びネタが多かったのですが、2月はJava EE6で試みているオフライン機能の実現について書きたいなぁと思っていたり(^^;

その関連で最近Apache Derbyを触る機会が多いのですが、テーブルにデータをインポートしたりエクスポートする際、Derbyの管理ツールであるijを利用しています。

f:id:kikutaro777:20140206184701j:plain

こんな感じで

f:id:kikutaro777:20140206184737j:plain

あっさりとCSV出力。

当初これを実行するバッチファイルを外側で作ってProcessBuilderでJavaプログラムからバッチ呼び出して実行する、とかやっていたのですが、そもそもJavaから呼べないのか…?と調べたら、意外と情報がなかったのですが、StackOverflowにJDBCから呼び出す例がありました。

Derby database export as a single file?

というか、ストアドをまともに書いたり使ったりしたことないので全然気づかなかったのですが、ijで打ってる「CALL SYSCS_UTIL.SYSCS_EXPORT_TABLE~」ってストアドを叩いていたのか…(^^;恥ずかしい…。

Connection conn = DriverManager.getConnection(
 "jdbc:derby://localhost:1527/C:\\Users\\kikuta\\Documents\\NetBeansProjects\\XxxOffline\\HogeDatabase;user=hogehoge;password=hogehoge");
CallableStatement ps = conn.prepareCall("CALL SYSCS_UTIL.SYSCS_EXPORT_TABLE (?,?,?,?,?,?)");
ps.setString(1, "SCHEMA_NAME");
ps.setString(2, "HOGEHOGETABLE");
ps.setString(3, "C:\\Users\\kikuta\\Documents\\NetBeansProjects\\XxxOffline\\export\\hogehoge.csv");
ps.setString(4, ",");
ps.setString(5, null);
ps.setString(6, "UTF-8");
ps.execute();

のように書いて普通に出力されました。元ネタはPreparedStatement使ってましたが、それを継承したCallableStatementというのがあるらしく。
その辺の差は日本語だと

[http://idocsq.net/page/413:title=[JDBC] Java + DBアプリケーションの必需品 JDBC API (PreparedStatement/CallableStatement編)]
statement

辺りが見つかりました。ストアド呼ぶならCallableStatementが良さそうな。

今回実はJavaをやってから初めてJDBCを素で扱った(ずっとJava EEでJPAだったので…)のですが、色々学ばんと…という感じ(^^;

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村