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(相当于所有的语句都缓存起来了)。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • flowable工作流所有业务概念

    flowable工作流所有业务概念1.什么是工作流审批根据本人的理解,就是审批流程管理。2.什么是flowable1.官方解释官方解释如下:Flowable项目提供了一套核心的开源业务流程引擎,这些引擎紧凑且高效。它们为开发人员、系统管理员和业务用户提供工作流和业务流程管理(BPM)平台。它的核心是一个闪电般快速、久经考验的动态BPMN流程引擎,伴随着DMN决策表和CMMN案例管理引擎,所有这些引擎都是用Java编写的。它们是Apache2.0许可的开放源代码,拥有一个承诺社区。所有引擎都可以嵌入

  • FLAG_ACTIVITY_NEW_TASK与FLAG_ACTIVITY_CLEAR_TOP的理解纠正「建议收藏」

    FLAG_ACTIVITY_NEW_TASK与FLAG_ACTIVITY_CLEAR_TOP的理解纠正「建议收藏」1.单独的FLAG_ACTIVITY_NEW_TASK并不等价于启动模式singleTask,它仅表示寻找activity所需的任务栈压入,(即TaskAffinity指定的任务栈,TaskAffinity默认为应用包名)2.FLAG_ACTIVITY_NEW_TASK+FLAG_ACTIVITY_CLEAR_TOP也不等价于启动模式singleTask3.在FLAG_ACTIVITY_…

  • python-根据语音识别让无字幕视频自动生成字幕,附srt字幕文件

    python-根据语音识别让无字幕视频自动生成字幕,附srt字幕文件

  • map转换成JSON的方法

    map转换成JSON的方法第一种alibabafalstjson:1.Map转JSONMap<String,Object>map=newHashMap<String,Object>();map.put(“a”,”a”);map.put(“b”,”123″);JSONObjectjson=newJSONO…

  • 软件开发视频资源分享[通俗易懂]

    软件开发视频资源分享[通俗易懂]资源分享资源均来源于网络,在自学/开公众号的时候收集而来。如果侵权请联系我,会第一时间删除。如果链接已失效(我也无办法,很多链接我是没有保存在自已的网盘中的,见谅)。Java基础Java马士兵:链接:https://pan.baidu.com/s/1jJRvxGi密码:v3xbJava毕向东:可以到往B站找,已上传到B站Java刘意:链接:https://pan.bai…

  • idea 2022.01.13最新激活码(JetBrains全家桶)「建议收藏」

    (idea 2022.01.13最新激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/ide…

发表回复

您的电子邮箱地址不会被公开。

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