JDBC操作二进制(java)

PreparedStatement对象可以使用输入和输出流来提供参数数据。这使您可以将整个文件放入可以保存大值的数据库列,例如Text和BLOB数据类型。

有以下方法可用于流式传输数据 -

  • setAsciiStream():此方法用于提供大的ASCII值。

  • setCharacterStream():此方法用于提供大型UNICODE值。(常用)

  • setBinaryStream():此方法用于提供较大的二进制值。(常用)

创建的存储大数据的表格中各个字段的属性类型如下:

若图片过大,还可使用mediumblob 类型格式

案例:向数据库中插入文本或者图片

public class Demo1 {
    public static void main(String[] args) throws Exception{
        Connection conn = DbUtils.getConnection();
        String sql = "insert into bigdata(content,image) values(?,?);";
        PreparedStatement pstat = conn.prepareStatement(sql);
        pstat.setCharacterStream(1,new FileReader("src\\db.properties"));
        pstat.setBinaryStream(2,new FileInputStream("src\\111.jpg"));
        pstat.executeUpdate();

        pstat.close();
        conn.close();
        System.out.println("执行完毕");
    }
}

 

案例:将数据空中的文本和图片读出,并赋值在硬盘中

public class Demo {
    public static void main(String[] args) {
        Connection conn = DbUtils.getConnection();
        String sql = "select content,image from bigdata where id = ?";
        PreparedStatement pstat = null;
        try {
            pstat = conn.prepareStatement(sql);
            //设置站位符的值(即问号的值)
            pstat.setInt(1,2);
            //得到查询结果集
            ResultSet rs = pstat.executeQuery();
            if(rs.next()){
                //获得读取文本字符流
                Reader reader = rs.getCharacterStream("content");
                //获得读取图片字节流
                InputStream is = rs.getBinaryStream("image");

                //创建写入字符流
                FileWriter fw  = new FileWriter("src\\empcopy.xml");
                //创建写入字节流
                FileOutputStream fos = new FileOutputStream("src\\004.jpg");
                //将文件写入到指定文件中
                char[] chars = new char[1024];
                int len=-1;
                while((len=reader.read(chars))!=-1){
                    fw.write(chars,0,len);
                    fw.flush();
                }

                byte[] bytes = new byte[1024];
                int len1=-1;
                while ((len=is.read(bytes))!=-1){
                    fos.write(bytes);
                    fos.flush();
                }

                reader.close();
                is.close();
                fw.close();
                fos.close();
                System.out.println("从数据库中读出数据并复制成功!!!");

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值