jasperreport 插入BLOB对象,创建表,插入BLOB对象

>>创建表create table blob_table(
id number primary key,
blob_cl blob not null
);
insert into blob_table values(1,to_blob('11111000011111'));
commit;
select * from blob_table;
update blob_table
set blob_cl=to_blob('110010000110011')
where id=1;
delete from blob_table where id=1;
commit;

插入对象
package test;
 
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.PrintStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class Test {
    private Connection conn;
 
    /**
     * 得到一个数据库的连接
     
     * @return 返加Connection对象
     */
    public Connection getConnection() {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@localhost:1521:lyx""scott""tiger");
        catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return conn;
    }
 
    /**
     * 向表中插入图片
     
     * @param path图片所在的路径
     * @return 整形 判断成功或失败
     */
    public int insertImage(String path) throws Exception {
        int i = 0;
        Statement st = null;
        ResultSet rs = null;
        conn=this.getConnection();
         
        conn.setAutoCommit(false);//设置数据库为不自动提交,必须的一步
        st = conn.createStatement();
        //先插入一个空对象,这里我调用了Empty_BLOB()函数
        i = st
                .executeUpdate("insert into image (id,image) values (seq1.nextval,Empty_BLOB())");
        //以行的方式锁定
        rs = st
                .executeQuery("select image from image where id=(select max(id) from image) for update");
        if (rs.next()) {
            //得到流
            oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1);
            //从得到的低级流构造一个高级流
            PrintStream ps = new PrintStream(blob.getBinaryOutputStream());
            BufferedInputStream bis = new BufferedInputStream(
                    new FileInputStream(path));
            byte[] buff = new byte[1024];
            int n = 0;
            //从输入到输出
            while ((n = bis.read(buff)) != -1) {
                ps.write(buff, 0, n);
 
            }
            //清空流的缓存
            ps.flush();
            //关闭流,注意一定要关
            ps.close();
            bis.close();
        }
        rs.close();
        st.close();
        conn.close();
        return i;
    }
 
    public static void main(String[] args) throws Exception {
        Test test=new Test();
        test.insertImage("e:\\3.jpg");
        System.out.println("OK");
 
 
    }
 
}
将Fields里面的BLOB对象的class类型改成 java.io.InputStream
posted @ 2017-01-20 11:04  stayrealhzq  阅读(256)  评论(0编辑  收藏  举报