Oracleでblobタイプの読み取り


blobを使うことは多くないですが、インターネットで見るとちょっと乱れています。データからblobを読むのも見られません。ここでまとめます。
データベース内のテーブルステートメントは以下の通りです。
create table blogtest(id number primary key,name varchar2(20),picture blob);

package August;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class OracleBlobTest {
	public static void main(String[] args) {

	}
	public static void readBlob() {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection conn = DriverManager.getConnection(
					"jdbc:oracle:thin:@127.0.0.1:1521/july", "scott",
					"snaillocke");
			Statement st = conn.createStatement();
			PreparedStatement ps = conn.prepareStatement("select * from BLOBTEST where id = ?");
			ps.setInt(1, 1);
			ResultSet rs = ps.executeQuery();
			rs.next();
			oracle.sql.BLOB imgBlob = (oracle.sql.BLOB) rs.getBlob(3);

			//         BLOB
			try{
			FileOutputStream outStream = new FileOutputStream("D:/oracleback.png");
			InputStream inStream = imgBlob.getBinaryStream();
			byte[] buf = new byte[10240];
			int len;
				while ((len = inStream.read(buf)) > 0) {
					outStream.write(buf, 0, len);
				}
				inStream.close();
				outStream.close();
			}catch(Exception e) {
				e.printStackTrace();
			}
			

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public static void writeBlob() {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection conn = DriverManager.getConnection(
					"jdbc:oracle:thin:@127.0.0.1:1521/july", "scott",
					"snaillocke");
			Statement st = conn.createStatement();
			//        empty_blob()
			//          ,  “for update”  
			PreparedStatement ps = conn.prepareStatement("insert into BLOBTEST (ID, NAME, PICTURE) values (1,'fang.jpg',?)");
			//   ORALCE.SQL.BLOB/CLOB.EMPTY_LOB()   BLOB/CLOB  
			ps.setBlob(1, oracle.sql.BLOB.empty_lob());
			ps.execute();
			ps.close();

			//      BLOB/CLOB  
			ps = conn
					.prepareStatement("SELECT * FROM BLOBTEST WHERE ID=? FOR UPDATE");
			ps.setInt(1, 1);

			ResultSet rs = ps.executeQuery();
			rs.next();

			oracle.sql.BLOB imgBlob = (oracle.sql.BLOB) rs.getBlob(3);

			//         BLOB
			try{
			FileInputStream inStream = new FileInputStream("D:/My Pictures/oracle.png");
			OutputStream outStream = imgBlob.getBinaryOutputStream();
			byte[] buf = new byte[10240];
			int len;
				while ((len = inStream.read(buf)) > 0) {
					outStream.write(buf, 0, len);
				}
				inStream.close();
				outStream.close();
			}catch(Exception e) {
				e.printStackTrace();
			}

			//   Blob        
			ps = conn
					.prepareStatement(" update BLOBTEST set PICTURE=?");
			ps.setBlob(1, imgBlob);
			ps.executeUpdate();

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

以上のコードはOracleドライバパッケージを導入しなければなりません。