JDBC_2Blob数据类型和批量操作「建议收藏」

JDBC_2Blob数据类型和批量操作「建议收藏」JDBC Blob数据类型PreparedStatement操作Blob类型数据Blob是一个二进制大型对象Statement不能操作Blob数据类型,以为Blob数据类型是无法使用字符串拼接的,PreparedStatement可以操作Blob数据类型插入Blob //插入Blob String sql = “insert into customers(name,email,birth,photo) values(?,?,?,?)”; java.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

JDBC Blob数据类型


PreparedStatement操作Blob类型数据

Blob是一个二进制大型对象

Statement不能操作Blob数据类型,以为Blob数据类型是无法使用字符串拼接的,PreparedStatement可以操作Blob数据类型
插入Blob


        //插入Blob
        String sql = "insert into customers(name,email,birth,photo) values(?,?,?,?)";
        java.sql.PreparedStatement ps = connection.prepareStatement(sql);
        ps.setObject(1,"张宇豪");
        ps.setObject(2,"zhang@qq.com");
        ps.setObject(3,"1992-09-08");
        FileInputStream fileInputStream = new FileInputStream(new File("play.jpg"));
        ps.setBlob(4,fileInputStream);
        ps.execute();
        ps.close();
        connection.close();

查询Blob

//查询Blob
        String sql = "select id,name,birth,photo from customers where id = ?";
        java.sql.PreparedStatement ps = connection.prepareStatement(sql);
        ps.setInt(1,2);
        ResultSet resultSet = ps.executeQuery();
        if(resultSet.next()){ 
   
            int id = resultSet.getInt(1);
            String name = resultSet.getString(2);
            String email = resultSet.getString(3);
            Date birth = resultSet.getDate(4);
            Blob photo = resultSet.getBlob(5);

            //将Blob类型的字段下载下来,以文件的方式保存在本地
            InputStream is = photo.getBinaryStream();
            FileOutputStream fos = new FileOutputStream("zhangyuhao.jpg");
            byte[] buffer = new byte[1024];
            int len;
            while ((len = is.read(buffer)) != -1){ 
   
                fos.write(buffer,0,len);
            }
        }

        ps.execute();
        ps.close();
        connection.close();

批量操作(主要指插入)
PreparedStatement比Statement效率更高
原因:DBServer会对预编译语句提供性能优化。因为预编译语句有可能被重复调用,所以语句在被DBServer的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行,而数据库不会对Statement语句进行缓存

进一步优化:
addBatch()方法 executeBatch() clearBatch()(和缓存的原理差不多)
注意:默认情况下mysql服务器默认是关闭批处理的,我们需要通过一个参数,让mysql开启批处理的支持。

//批量插入
        String sql = "insert into goods(name) values(?)";
        java.sql.PreparedStatement ps = connection.prepareStatement(sql);
        for(int i = 1;i <= 20000;i ++){ 
   
            ps.setObject(1,"name_" + i);
            ps.addBatch();
            
            if(i % 500 == 0){ 
   
                ps.execute();
                ps.clearBatch();
            }
            
        }

进一步优化
设置connection.setAutoCommit(false),最后等所有sql语句执行完统一commit(相当于所有的语句都缓存起来了)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168822.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • anaconda pycharm设置编译器_anaconda pycharm环境配置

    anaconda pycharm设置编译器_anaconda pycharm环境配置Pycharm是一个非常好用的Python编译运行IDE,anaconda则用于管理Python中各种有用的包。下面讲讲在Ubuntu系统下让Pycharm能够使用anaconda管理的各种包。1找到编译器选项首先打开Pycharm然后点击File-&amp;amp;amp;amp;amp;gt;settings,然后就可以看到下图所示界面:…

    2022年8月26日
    18
  • Spring boot 使用Jasypt加密用户名密码

    Spring boot 使用Jasypt加密用户名密码

    2021年5月15日
    133
  • 字符数组初始化为空

    字符数组初始化为空字符数组初始化为空1.总结起来有以下三种方式:2.分析3.结论1.总结起来有以下三种方式:(1)charstr[10]=””;(2)charstr[10]={’\0’};(3)charstr[10]=‘\0’;2.分析第(1)(2)种方式是将str数组的所有元素都初始化为’\0’,而第(3)种方式是只将str数组的第一个元素初始化为’\0’。如果数组的si…

    2022年7月18日
    22
  • h5py快速入门指南

    h5py是Python语言用来操作HDF5的模块。下面的文章主要介绍h5py的快速使用入门,翻译自h5py的官方文档:http://docs.h5py.org/en/latest/quick.html。该翻译仅为个人学习h5py为目的,如有翻译不当之处,请速联系读者或提供其它好的翻译。安装使用Anaconda或者Miniconda:condainstallh5py用Enthou…

    2022年4月4日
    102
  • ERROR: Could not install packages due to an OSError…解决方法

    ERROR: Could not install packages due to an OSError…解决方法ERROR:CouldnotinstallpackagesduetoanOSError…解决办法ERROR:CouldnotinstallpackagesduetoanOSError:[WinError5]拒绝访问。:‘c:\users\lenovo\python\lib\site-packages\~umpy\.libs\libopenblas.WCDJNK7YVMPZQ2ME2ZZHJJRJ3JIKNDB7.gfortran-win_amd64.dll’Con

    2022年6月24日
    196
  • datagrip 2021 mac 激活码(在线激活)

    datagrip 2021 mac 激活码(在线激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    124

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号