JDBC插入二进制的数据

Posted linglongfang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC插入二进制的数据相关的知识,希望对你有一定的参考价值。

二进制数据,在Java中需要使用流对象去表示,通常文件采用FileInputStream和OutputStream对象

一、存放一个二进制数据,采取InputStream对象

例如给数据库中存一个图片:异常和工具类没给请见谅

@Test
public void test4() throws Exception {
    //获取连接
    Connection conn = JDBCUtils.getConnection();
    // 获取PreparedStatement
    String sql = "insert into student(sname,photo)values(?,?)";
    PreparedStatement ps = conn.prepareStatement(sql);
    // 填充占位符
    ps.setString(1, "xxx");
    InputStream fis = new FileInputStream("xxx.jpg");
    ps.setBlob(2, fis);
    // 执行SQL
    ps.executeUpdate();
    // 关闭资源
    JDBCUtils.closeResource(conn,ps);
}

 

 二、取出一个二进制数据,需要采用InputStream和OutputStream对象

例如将刚刚存的图片取出来:异常和工具类没给请见谅

@Test
public void test5() throws Exception {
    //获取数据库连接
    Connection conn = JDBCUtils.getConnection();
    // 获取PreparedStatement
    String sql = "select sname,photo from student where id = ?";
    PreparedStatement ps = conn.prepareStatement(sql);
    // 填充占位符
    ps.setInt(1, 1);
    // 执行SQL
    ResultSet rs = ps.executeQuery();
    //将返回的对象处理,将图片取出
    if(rs.next()){
        String sname = rs.getString(1);
        Blob blob = rs.getBlob(2);
        InputStream is = blob.getBinaryStream();
        OutputStream os = new FileOutputStream("HHH.jpg");
        byte [] buffer = new byte[1024];
        int len = 0;
        while((len = is.read(buffer)) != -1){
            os.write(buffer, 0, len);
        }
    }
    // 关闭资源
    JDBCUtils.close(conn,ps);
}    

 

以上是关于JDBC插入二进制的数据的主要内容,如果未能解决你的问题,请参考以下文章

带有 ActiveRecord 和 JDBC 的 SQLServer 二进制数据

将代码片段插入数据库并在 textarea 中以相同方式显示

tomcat/jdbc/mysql: 可以插入 ÿ(U+00FF) 但不能插入 Ā (U+0100)

H2 jdbc 异常 - 具有奇数个字符的十六进制字符串

jdbc笔记4

com.microsoft.sqlserver.jdbc.SQLServerException: 将截断字符串或二进制数据。