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();
}
}
} |