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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vsftp账号_Vsftp用户限制

    vsftp账号_Vsftp用户限制背景Oracle全库备份,异地备份在实现异地备份后,由第三方人员登录服务器拉取dmp文件.为了确保安全,创建一个特定ftp账号用于第三方人员使用要求1.可以登录服务器2.可以拉取dmp文件3.仅限在dmp文件的目录下,不能cd其他路径,ls其他目录解决过程yum安装ftp服务[root@78778e06dc0a/]#yuminstallvsftpd-y修改vsftp配置文件,开启限制[…

    2025年7月20日
    4
  • 104规约笔记「建议收藏」

    104规约笔记「建议收藏」电力系统中常见的设备分为调度端(控制站、主站、客户机),服务端(被控站、子站,典型设备包含TTU、RTU等),两者之间通过104规约来进行数据通信与传输。其传输层实际上使用的是TCP协议进行数据的传输。固定端口号为2404。《电力系统104规约帧报文解析》注意这里的调度端和服务端,调度端往往安装在PC电脑上,用网线连接(可靠的网络),服务端是工业设备:TTU(distributionTransformersupervisoryTerminalUnit,配电变压器监测终端)。RTU(远程终

    2022年6月20日
    34
  • (一)easyUI之第一个demo

    (一)easyUI之第一个demo一、下载官网下载:http://www.jeasyui.net/download/同时并下载官方中文API文档。解压后的目录结构:二、第一个demo1新建工程并导入包1新建工程并导

    2022年7月2日
    24
  • 编写你自己的单点登录(SSO)服务

    编写你自己的单点登录(SSO)服务

    2021年12月10日
    58
  • ios android 一键换机,‎App Store 上的“手机搬家 – 一键换机助手”

    ios android 一键换机,‎App Store 上的“手机搬家 – 一键换机助手”极速数据迁移,一键手机克隆,换机更便捷。数据传输工具,一键传输通讯录、照片、视频至新手机,超实用的手机一键搬家工具!没有WiFi?新旧手机换机太麻烦?流量不够用?传大文件太慢?没关系,快来试试!最酷最快的多功能文件传输应用!让你在手机间畅享极速互传。传资料不需要联网、不需要电脑、不需要数据线、不需要SIM卡、不需要WIFI,就可以一键把旧手机资料换到新手机。【给您安全、快速、简单、便捷的换机体验…

    2022年5月9日
    131
  • CTK环境搭建

    CTK环境搭建CTK环境搭建1 下载相关文件下载Cmake:https://cmake.org/下载ctk源码:https://github.com/commontk/CTK2 编译CTK2.1 cmake打开cmakelistctk源码下载完之后在当前文件夹下新建build目录。如图2.2 qt环境版本确认使用cmake开进入CTK-Master目录,选择源代码目录和Build目录。进行…

    2022年6月6日
    64

发表回复

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

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