JDBC实现oracle blob 出库入库

1,首先建一个足够简单的表imageTable
      id         varchar(20)
      image   blob
2,blob入库
      拷贝Sunset.jpg图片在C盘根目录下     
 1      DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); 
 2      Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:beyondduke","duke","duke"); 
 3      conn.setAutoCommit(false); 
 4      BLOB blob = null
 5      PreparedStatement pstmt = conn.prepareStatement("insert into imageTable(id,image) values(?,empty_blob())"); 
 6      pstmt.setString(1,"10001"); 
 7      pstmt.executeUpdate(); 
 8      pstmt.close(); 
 9      pstmt = conn.prepareStatement("select content from imageTable where id= ? for update"); 
10      pstmt.setString(1,"10001"); 
11      ResultSet rs = pstmt.executeQuery(); 
12     if (rs.next()) blob = (BLOB) rs.getBlob(1); 
13      String fileName = "c://Sunset.jpg"
14      File f = new File(fileName); 
15      FileInputStream fin = new FileInputStream(f); 
16      System.out.println("file size = " + fin.available()); 
17      pstmt = conn.prepareStatement("update imageTable set image=? where id=?"); 
18      OutputStream out = blob.getBinaryOutputStream(); 
19       byte[] data = new byte[(int)fin.available()]; 
20      fin.read(data); 
21      out.write(data); 
22      out.close(); 
23      fin.close(); 
24
25      pstmt.setBlob(1,blob); 
26      pstmt.setString(2,"fankai"); 
27
28      pstmt.executeUpdate(); 
29      pstmt.close(); 
30
31      conn.commit(); 
32      conn.close(); 
浏览数据库的数据,发现image项中数据大小与图片大小一致,说明入库了!
 3,blob出库
 1   DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
 2   Connection conn = DriverManager.getConnection(            "jdbc:oracle:thin:@localhost:1521:beyondduke""duke","duke");     
          conn.setAutoCommit(
false);
 3    Statement stmt = conn.createStatement();
 4/* 查询BLOB对象 */
 5    ResultSet rs = stmt.executeQuery("SELECT content FROM javatest WHERE id='1001'");
 6while (rs.next()) {
 7/* 取出此BLOB对象 */    
 8    oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("image");
 9 BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("d://Sunset.jpg"));            
           BufferedInputStream in 
= new BufferedInputStream(blob    .getBinaryStream());        
10    int c;
11while ((c = in.read()) != -1{ out.write(c);        
12   }

13   in.close();
14   out.close();
15   rs.close();
16   stmt.close();
17   conn.close();
18
检查D盘根目录,会发现Sunset.jpg文件,跟C盘下是一样的,说明入库出库成功!

posted on 2006-02-14 09:23 beyondduke 阅读(2649) 评论(0)  编辑  收藏 所属分类: 编程随笔


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 
<2006年2月>
2930311234
567891011
12131415161718
19202122232425
2627281234
567891011

导航

统计

公告


MSN联系

常用链接

留言簿(2)

随笔分类

随笔档案

我的连接

搜索

最新评论

阅读排行榜

评论排行榜