Oracle JDBC存入图片Blob

创建测试表

create table test_img(
  id    integer primary key,
  name  varchar2(32),
  image blob
);
存储图片
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.sql.BLOB;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        PreparedStatement pst = null;
        ResultSet rs = null;
        Connection conn = ConnectionManager.getConnection();
        String sql = "insert into test_img(id,name,image) values(?,?,?)";
        try {
            pst = conn.prepareStatement(sql);
            pst.setInt(1, 1);
            pst.setString(2, "test");
            pst.setBlob(3, BLOB.empty_lob());  //插入空对象empty_blob()  
            int ii = pst.executeUpdate();

            OutputStream os = null;
            String q_sql = "select image from test_img where id = ? for update"; // 锁定数据行进行更新  
            pst = conn.prepareStatement(q_sql);
            pst.setInt(1, 1);
            rs = pst.executeQuery();
            if (rs.next()) {
                oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("image");
                os = blob.getBinaryOutputStream();
                InputStream is = new FileInputStream("D:\\image.jpg");
                int i = 0;
                while ((i = is.read()) != -1) {
                    os.write(i);
                }
            }
            os.flush();
            os.close();
            ConnectionManager.closeAll(rs, pst, conn); // 关闭资源

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
JDBC辅助类

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ConnectionManager {
    public static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
    public static final String URL = "jdbc:oracle:thin:@localhost:1521/orcl";
    public static final String USERNAME = "test";
    public static final String PASSWORD = "test";
    /**
     * 通过静态代码块 注册数据库驱动
     */
    static{
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获得Connection
     * 
     * @return
     */
    public static Connection getConnection() {
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
        }catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    /**
     * 关闭ResultSet
     * @param rs
     */
    public static void closeResultSet(ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 关闭Statement
     * @param st
     */
    public static void closeStatement(Statement st) {
        if (st != null) {
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 关闭Connection
     * @param conn
     */
    public static void closeConnection(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 关闭全部
     * @param rs
     * @param sta
     * @param conn
     */
    public static void closeAll(ResultSet rs,Statement sta,Connection conn){
        closeConnection(conn);
        closeStatement(sta);
        closeResultSet(rs);
    }

}
效果如图:


作者:itmyhome

出处:http://blog.csdn.net/itmyhome1990/article/details/41629669



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。