読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

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

Derby JDBC

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へ
にほんブログ村