用JDBC和HIBERNATE写入ORACLE的blog字段

本文介绍了如何使用JDBC和Hibernate将二进制数据写入Oracle数据库的BLOB字段。首先,通过JDBC演示了写入过程,强调了插入空BLOB、获取cursor和更新数据的步骤。然后,展示了使用Hibernate简化BLOB写入的示例,说明其便捷性。特别指出JDK 1.3的JDBC规范缺少写Blob接口,而JDK 1.4及更高版本已加入此功能。
摘要由CSDN通过智能技术生成

Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据。

写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对blob进行操作,因而你在写入Blob之前,必须获得cursor才能进行写入,那么如何获得Blob的cursor呢?

这需要你先插入一个empty的blob,这将创建一个blob的cursor,然后你再把这个empty的blob的cursor用select查询出来,这样通过两步操作,你就获得了blob的cursor,可以真正的写入blob数据了。

看下面的JDBC的demo,把oraclejdbc.jar这个二进制文件写入数据库表javatest的content字段(这是一个blob型字段)

 

代码
  1. import  java.sql.*;   
  2. import  java.io.*;   
  3. import  oracle.sql.*;   
  4. public   class  WriteBlob {   
  5.   
  6.    public   static   void  main(String[] args) {   
  7.   
  8.      try  {   
  9.       DriverManager.registerDriver( new  oracle.jdbc.driver.OracleDriver());   
  10.       Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:orcl" , "fankai" , "fankai" );   
  11.       conn.setAutoCommit( false );   
  12.   
  13.       BLOB blob =  null ;   
  14.   
  15.       PreparedStatement pstmt = conn.prepareStatement( "insert into javatest(name,content) values(?,empty_blob())" );   
  16.       pstmt.setString( 1 , "fankai" );   
  17.       pstmt.executeUpdate();   
  18.       pstmt.close();   
  19.   
  20.       pstmt = conn.prepareStatement( "select content from javatest where name= ? for update" );   
  21.       pstmt.setString( 1 , "fankai" );   
  22.       ResultSet rset = pstmt.executeQuery();   
  23.        if  (rset.next()) blob = (BLOB) rset.getBlob( 1 );   
  24.   
  25.       String fileName =  "oraclejdbc.jar" ;   
  26.       File f =  new  File(fileName);   
  27.       FileInputStream fin =  new  FileInputStream(f);   
  28.       System.out.println( "file size = "  + fin.available());   
  29.   
  30.       pstmt = conn.prepareStatement(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值