import java.sql.*; import java.io.*; import oracle.sql.*; public class WriteBlob {
public static void main(String[] args) {
try { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","fankai","fankai"); conn.setAutoCommit(false);
BLOB blob = null;
PreparedStatement pstmt = conn.prepareStatement("insert into javatest(name,content) values(?,empty_blob())"); pstmt.setString(1,"fankai"); pstmt.executeUpdate(); pstmt.close();
pstmt = conn.prepareStatement("select content from javatest where name= ? for update"); pstmt.setString(1,"fankai"); ResultSet rset = pstmt.executeQuery(); if (rset.next()) blob = (BLOB) rset.getBlob(1);
String fileName = "oraclejdbc.jar"; File f = new File(fileName); FileInputStream fin = new FileInputStream(f); System.out.println("file size = " + fin.available());
pstmt = conn.prepareStatement("update javatest set content=? where name=?");
OutputStream out = blob.getBinaryOutputStream();
int count = -1, total = 0; byte[] data = new byte[(int)fin.available()]; fin.read(data); out.write(data); /* byte[] data = new byte[blob.getBufferSize()]; 另一种实现方法,节省内存 while ((count = fin.read(data)) != -1) { total += count; out.write(data, 0, count); } */
fin.close(); out.close();
pstmt.setBlob(1,blob); pstmt.setString(2,"fankai");
pstmt.executeUpdate(); pstmt.close();
conn.commit(); conn.close(); } catch (SQLException e) { System.err.println(e.getMessage()); e.printStackTrace(); } catch (IOException e) { System.err.println(e.getMessage()); } }
}
|