虽然用blob的情况不多,但是还是得了解一下,网上看得有点乱,而且没有看到从数据读blob的。在此总结一下:
数据库中的建表语句如下:
1 createtable blogtest(id number primary key,name varchar2(20),picture blob);
2 package August;
3
4 import java.io.FileInputStream;
5 import java.io.FileOutputStream;
6 import java.io.InputStream;
7 import java.io.OutputStream;
8 import java.sql.Connection;
9 import java.sql.DriverManager;
10 import java.sql.PreparedStatement;
11 import java.sql.ResultSet;
12 import java.sql.SQLException;
13 import java.sql.Statement;
14
15 publicclass OracleBlobTest {
16 public static void main(String[] args) {
17
18 }
19 public static void readBlob() {
20 try {
21 Class.forName("oracle.jdbc.driver.OracleDriver");
22 Connection conn = DriverManager.getConnection(
23 "jdbc:oracle:thin:@127.0.0.1:1521/july", "scott",
24 "snaillocke");
25 Statement st = conn.createStatement();
26 PreparedStatement ps = conn.prepareStatement("select * from BLOBTEST where id = ?");
27 ps.setInt(1, 1);
28 ResultSet rs = ps.executeQuery();
29 rs.next();
30 oracle.sql.BLOB imgBlob = (oracle.sql.BLOB) rs.getBlob(3);
31
32 //将二进制数据写入BLOB
33 try{
34 FileOutputStream outStream =new FileOutputStream("D:/oracleback.png");
35 InputStream inStream = imgBlob.getBinaryStream();
36 byte[] buf =new byte[10240];
37 int len;
38 while ((len = inStream.read(buf)) > 0) {
39 outStream.write(buf, 0, len);
40 }
41 inStream.close();
42 outStream.close();
43 }catch(Exception e) {
44 e.printStackTrace();
45 }
46
47
48 }catch (ClassNotFoundException e) {
49 e.printStackTrace();
50 }catch (SQLException e) {
51 e.printStackTrace();
52 }
53 }
54 public static void writeBlob() {
55 try {
56 Class.forName("oracle.jdbc.driver.OracleDriver");
57 Connection conn = DriverManager.getConnection(
58 "jdbc:oracle:thin:@127.0.0.1:1521/july", "scott",
59 "snaillocke");
60 Statement st = conn.createStatement();
61 //插入一个空对象empty_blob()
62 //锁定数据行进行更新,注意“for update”语句
63 PreparedStatement ps = conn.prepareStatement("insert into BLOBTEST (ID, NAME, PICTURE) values (1,'fang.jpg',?)");
64 //通过ORALCE.SQL.BLOB/CLOB.EMPTY_LOB()构造空BLOB/CLOB对象
65 ps.setBlob(1, oracle.sql.BLOB.empty_lob());
66 ps.execute();
67 ps.close();
68
69 //再次对读出BLOB/CLOB句柄
70 ps = conn
71 .prepareStatement("SELECT * FROM BLOBTEST WHERE ID=? FOR UPDATE");
72 ps.setInt(1, 1);
73
74 ResultSet rs = ps.executeQuery();
75 rs.next();
76
77 oracle.sql.BLOB imgBlob = (oracle.sql.BLOB) rs.getBlob(3);
78
79 //将二进制数据写入BLOB
80 try{
81 FileInputStream inStream =new FileInputStream("D:/My Pictures/oracle.png");
82 OutputStream outStream = imgBlob.getBinaryOutputStream();
83 byte[] buf =new byte[10240];
84 int len;
85 while ((len = inStream.read(buf)) > 0) {
86 outStream.write(buf, 0, len);
87 }
88 inStream.close();
89 outStream.close();
90 }catch(Exception e) {
91 e.printStackTrace();
92 }
93
94 //再将Blob字段更新到数据库
95 ps = conn
96 .prepareStatement(" update BLOBTEST set PICTURE=?");
97 ps.setBlob(1, imgBlob);
98 ps.executeUpdate();
99
100 }catch (ClassNotFoundException e) {
101 e.printStackTrace();
102 }catch (SQLException e) {
103 e.printStackTrace();
104 }
105 }
106 }