数据库:Oracle 10G XE
数据源驱动:jdbc12.jar
文件名:WriteBlob
数据库中建立一个为clobtest的表,内有两个字段,name (varchar2(20)),content(blob)。
1package dbdriver;23/** *//**4 * 2008-09-285 * @author duduli6 * email: lxyzj2000@gmail.com7 */8import java.sql.*;9import java.io.*;10import oracle.sql.*;1112public class WriteBlob {1314 public static void main(String[] args) {15 try {16 String fName2 = "";17 String fileName = "E://jianxin.bmp";18//E盘下游个jianxin.bmp的图像文件19 File f = new File(fileName);20 String fName = f.getName();21 int i = fName.lastIndexOf('.');22 if (i > 0 && i < fName.length()-1){23 fName2 = fName.substring(0,i);24 }25 System.out.println(fName2);26//获得文件名,出去后缀的文件名。27 DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());28 Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:XE", "system", "duduli ");29 conn.setAutoCommit(false);30 BLOB blob = null;31 PreparedStatement pstmt = conn.prepareStatement("insert into blobtest(name,content) values(?,empty_blob())");32 pstmt.setString(1, fName2);33 pstmt.executeUpdate();34 pstmt.close();35 pstmt = conn.prepareStatement("select content from blobtest where name= ? for update");36 pstmt.setString(1, fName2);37 ResultSet rset = pstmt.executeQuery();38 if (rset.next()) {39 blob = (BLOB) rset.getBlob(1);40 }4142 FileInputStream fin = new FileInputStream(f);43 System.out.println("file size = " + fin.available());44 pstmt = conn.prepareStatement("update blobtest set content=? where name=?");45 OutputStream ut = blob.getBinaryOutputStream();46 byte[] data = new byte[(int) fin.available()];47 fin.read(data);48 out.write(data);49 fin.close();50 out.close();51 pstmt.setBlob(1, blob);52 pstmt.setString(2, fName2);53 pstmt.executeUpdate();54 pstmt.close();55 conn.commit();56 conn.close();57 } catch (SQLException e) {58 System.err.println(e.getMessage());59 e.printStackTrace();60 } catch (IOException e) {61 System.err.println(e.getMessage());62 }63 }64}
路遥知马力,日久见人心。