数据库:oracle 10G XE
数据源驱动:jdbc12.jar
文件名:WriteBlob
数据库中建立一个为clobtest的表,内有两个字段,name (varchar2(20)),content(blob)。
1package dbdriver;
2
3/** *//**
4 * 2008-09-28
5 * @author duduli
6 * email: lxyzj2000@gmail.com
7 */
8import java.sql.*;
9import java.io.*;
10import oracle.sql.*;
11
12public class WriteBlob {
13
14 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 }
41
42 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 out = 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}