/**
 * @author Kevin 2018-1-16
 * 
 * Blob(二进制大对象)对象的存储 jdbc实现。
 *
 */
public class BlobObjectDemo {

    public static void main(String[] args) throws IOException {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        }
        Connection conn = null;
        Statement state = null;
        ResultSet rs = null;

        try {
            conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "demo", "demo");

            state = conn.createStatement();
            String id = UUID.randomUUID().toString().replace("-", "");
            String insertSql = "insert into test_blob values('"+id+"',empty_blob())";
            state.execute(insertSql);

            File f = new File("D:\\壁纸\\12 (1).jpg");
            FileInputStream in = new FileInputStream(f);

            String sql = "select * from test_blob where id='"+id+"' for update";

            rs = state.executeQuery(sql);

            while(rs.next()){
                Blob b = rs.getBlob(2);
                OutputStream out = b.setBinaryStream(0);
                byte[] bytes = new byte[in.available()];
                int len = 0;
                while((len = in.read(bytes)) != -1){
                    out.write(bytes, 0, len);
                }
            }

        } catch (SQLException e) {
            System.err.println("出错回滚");
            e.printStackTrace();
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        } finally{
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                state.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}
posted on 2018-01-16 18:08  菜码农先生  阅读(93)  评论(0编辑  收藏  举报