`
王牌海盗
  • 浏览: 238619 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA操作Oracle blob类型

阅读更多
java 代码
  1. package test;   
  2.   
  3. import java.io.BufferedInputStream;   
  4. import java.io.FileInputStream;   
  5. import java.io.PrintStream;   
  6. import java.sql.Connection;   
  7. import java.sql.DriverManager;   
  8. import java.sql.ResultSet;   
  9. import java.sql.SQLException;   
  10. import java.sql.Statement;   
  11.   
  12. public class Test {   
  13.     private Connection conn;   
  14.   
  15.     /**  
  16.      * 得到一个数据库的连接  
  17.      *   
  18.      * @return 返加Connection对象  
  19.      */  
  20.     public Connection getConnection() {   
  21.         try {   
  22.             Class.forName("oracle.jdbc.driver.OracleDriver");   
  23.             conn = DriverManager.getConnection(   
  24.                     "jdbc:oracle:thin:@localhost:1521:lyx""scott""tiger");   
  25.         } catch (ClassNotFoundException e) {   
  26.             // TODO Auto-generated catch block   
  27.             e.printStackTrace();   
  28.         } catch (SQLException e) {   
  29.             // TODO Auto-generated catch block   
  30.             e.printStackTrace();   
  31.         }   
  32.         return conn;   
  33.     }   
  34.   
  35.     /**  
  36.      * 向表中插入图片  
  37.      *   
  38.      * @param path图片所在的路径  
  39.      * @return 整形 判断成功或失败  
  40.      */  
  41.     public int insertImage(String path) throws Exception {   
  42.         int i = 0;   
  43.         Statement st = null;   
  44.         ResultSet rs = null;   
  45.         conn=this.getConnection();   
  46.            
  47.         conn.setAutoCommit(false);//设置数据库为不自动提交,必须的一步   
  48.         st = conn.createStatement();   
  49.         //先插入一个空对象,这里我调用了Empty_BLOB()函数   
  50.         i = st.executeUpdate("insert into image (id,image) values (seq1.nextval,Empty_BLOB())");   
  51.         //以行的方式锁定   
  52.         rs = st.executeQuery("select image from image where id=(select max(id) from image) for update");   
  53.         if (rs.next()) {   
  54.             //得到流   
  55.             oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1);   
  56.             //从得到的低级流构造一个高级流   
  57.             PrintStream ps = new PrintStream(blob.getBinaryOutputStream());   
  58.             BufferedInputStream bis = new BufferedInputStream(   
  59.                     new FileInputStream(path));   
  60.             byte[] buff = new byte[1024];   
  61.             int n = 0;   
  62.             //从输入到输出   
  63.             while ((n = bis.read(buff)) != -1) {   
  64.                 ps.write(buff, 0, n);   
  65.   
  66.             }   
  67.             //清空流的缓存   
  68.             ps.flush();   
  69.             //关闭流,注意一定要关   
  70.             ps.close();   
  71.             bis.close();   
  72.         }   
  73.         rs.close();   
  74.         st.close();   
  75.         conn.close();   
  76.         return i;   
  77.     }   
  78.   
  79.     public static void main(String[] args) throws Exception {   
  80.         Test test=new Test();   
  81.         test.insertImage("e:\\3.jpg");   
  82.         System.out.println("OK");   
  83.   
  84.   
  85.     }   
  86.   
  87. }   
分享到:
评论
1 楼 smithsun 2009-01-09  
不错,很简洁。但愿大家都写这种文章,没有一个字的废话。

相关推荐

Global site tag (gtag.js) - Google Analytics