BLOB型の列に対する操作を行うプログラム例について説明します。
以下のサンプルアプリケーションでは、ネーミングサービスを起動しているホスト名に、“myhost”を指定しています。サンプルアプリケーションを実行する環境に合わせて、ホスト名の値を修正してください。
また、“OrgData.txt”というファイルのデータをデータベースに追加しています。サンプルアプリケーション実行時に、サンプルアプリケーションのclassファイルと同じフォルダ内に“OrgData.txt”を格納してください。“OrgData.txt”の内容については、以下を参照してください。
TESTDATA
import java.util.*; import java.sql.*; import javax.sql.*; import java.io.*; import javax.naming.*; public class MyBlobAccess { public static void main(String args[]) { try { // JNDI環境を指定します。 Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY,"com.fujitsu.symfoware.jdbc2.jndisp.SYMContextFactory"); env.put(Context.PROVIDER_URL,"SYM://myhost:10326"); InitialContext ctx = new InitialContext(env); // JDBCデータソースを取得します。 DataSource ds = (DataSource)ctx.lookup("jdbc/ds1"); // データベースと接続します。 Connection con = ds.getConnection(); // 自動コミットの設定 con.setAutoCommit(false); // データ削除 Statement stmt = con.createStatement(); stmt.executeUpdate("DELETE FROM GENERAL.BLOBTBL"); stmt.close(); // INSERT文を準備 PreparedStatement pstmt = con.prepareStatement("INSERT INTO GENERAL.BLOBTBL VALUES(1, ?)"); // BLOBデータを設定 FileInputStream oFIS = new FileInputStream("OrgData.txt"); pstmt.setBinaryStream(1, oFIS, oFIS.available()); // INSERT文を実行 pstmt.executeUpdate(); pstmt.close(); oFIS.close(); con.commit(); // ResultSetインタフェースのオブジェクトを生成 Statement stmt2 = con.createStatement(); ResultSet rs = stmt2.executeQuery("SELECT A_BLOB FROM GENERAL.BLOBTBL"); // データベースのデータを参照 while (rs.next()) { InputStream oIS = rs.getBinaryStream(1); // 出力先ファイルを指定 FileOutputStream oFOS = new FileOutputStream("AftData.txt"); //ストリームからデータをbyte配列で一括に読み込み byte[] bTmp = new byte[oIS.available()]; oIS.read(bTmp); // 出力先ファイルにデータを印字 oFOS.write(bTmp); oFOS.close(); oIS.close(); } // 解放処理 rs.close(); stmt2.close(); // ResultSetインタフェースのオブジェクトを生成 Statement stmt3 = con.createStatement(); ResultSet rs2 = stmt3.executeQuery("SELECT A_BLOB FROM GENERAL.BLOBTBL"); // データベースのデータを参照 while (rs2.next()) { InputStream oIS = rs2.getBinaryStream(1); // 出力先ファイルを指定 FileOutputStream oFOS = new FileOutputStream("AftData2.txt"); //ストリームからデータを1バイトずつ-1が返却されるまで読込み int iBData=0; while ((iBData=oIS.read()) != -1) { // 出力先ファイルにデータを1バイトずつ印字 oFOS.write(iBData); } oFOS.close(); oIS.close(); } // 解放処理 rs2.close(); stmt3.close(); con.commit(); con.close(); } // SQLExceptionが発生した場合の処理を記述します。 catch (SQLException e) { // エラー情報を出力します。 System.out.println("ERROR MESSAGE : " + e.getMessage()); System.out.println("SQLSTATE : " + e.getSQLState()); System.out.println("ERROR CODE : " + e.getErrorCode()); e.printStackTrace(); } // その他のExceptionが発生した場合の処理を記述します。 catch (Exception e) { // スタックトレースを出力します。 System.out.println("ERROR MESSAGE : " + e.getMessage()); e.printStackTrace(); } } }