1月はAzureやTwitter4Jなど、仕事ネタより遊びネタが多かったのですが、2月はJava EE6で試みているオフライン機能の実現について書きたいなぁと思っていたり(^^;
その関連で最近Apache Derbyを触る機会が多いのですが、テーブルにデータをインポートしたりエクスポートする際、Derbyの管理ツールであるijを利用しています。
こんな感じで
あっさりと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だったので…)のですが、色々学ばんと…という感じ(^^;