大对象存取

本文提供了一个使用Java进行数据库BLOB类型操作的例子,包括创建包含BLOB字段的表、插入图片文件到数据库以及从数据库读取图片并保存。
大对象存取

 
大对象存取
//BLOB和CLOB方法一样
package text;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.io.File;
import java.io.FileInputStream;
import java.io.*;
import java.sql.ResultSet;
import oracle.sql.BLOB;
public class BLOBtest {
 public static void createTab() {               //建表
    String sql = "create table myimg (id number,img blob)";
    Connection con = DBConn.getConnection();
    Statement stmt = null;
    try {
      stmt = con.createStatement();
      stmt.execute(sql);
      System.out.println("table created------");
    }
    catch (SQLException ex) {ex.printStackTrace();}
    finally {
      try {
        stmt.close();
        con.close();
      }
      catch (SQLException ex1) {
        ex1.printStackTrace();
      }    } }
 public static void insertData() {                                //插入大对象
    Connection con =DBConn.getConnection();
    PreparedStatement pstmt = null;
    String sql = "insert into myimg values (?,?)";
    try {
      pstmt = con.prepareStatement(sql);
      pstmt.setInt(1, 1000);
      File file = new File("f:/jdbcdemo/2.jpg");
      long len = file.length();
      FileInputStream fis = new FileInputStream(file);
      pstmt.setBinaryStream(2, fis, (int) len);
      pstmt.execute();
      System.out.println("insert pic success--------");
      fis.close();
    } catch (SQLException ex) {
      ex.printStackTrace();
    }catch (FileNotFoundException ex1) {
      ex1.printStackTrace();
    }catch (IOException ex2) {ex2.printStackTrace();}
    finally {
      try {
        pstmt.close();
        con.close();
      }
      catch (SQLException ex3) {
        ex3.printStackTrace();
      }    } }
 public static void getPic() {                           //下载大对象
    Connection con = DBConn.getConnection();
    Statement stmt = null;
    ResultSet rst = null;
    String sql = "select img from myimg where id = 1000";
   try {
      stmt = con.createStatement();
      rst = stmt.executeQuery(sql);
      while (rst.next()) {
        File f = new File("f:/jdbcdemo/123.jpg");
        FileOutputStream fos = new FileOutputStream(f);
        BLOB blob = (BLOB) rst.getBlob(1);
        InputStream is = blob.getBinaryStream();
        DataInputStream dis = new DataInputStream(is);
        int len;
        len = dis.read();
        while (len != -1) {
          fos.write(len);
          len = dis.read();
        }
       fos.close();
       dis.close();
       System.out.println("read finished-------------");
      }    }
    catch (SQLException ex) { ex.printStackTrace();}
    catch (FileNotFoundException ex1) {ex1.printStackTrace(); }
catch (IOException ex2) {ex2.printStackTrace();
}finally {
      try {
        stmt.close();
        con.close();
      }catch (SQLException ex3) {ex3.printStackTrace();}
    } }
 public static void main(String[] args) {
           createTab();
           insertData();
           getPic();
 }
}
 



Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1205624


[ 收藏到我的网摘]   weasel发表于 2006年09月11日 01:30:00
href="http://blog.youkuaiyun.com/aptweasel/Services/Pingback.aspx" rel="pingback" />
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值