【笔试面试考点】PreparedStatement和Statement的区别与联系批量插入数据的优化
目录
一.PreparedStatement和Statement的区别去联系
一.preparedStatement与Statement的联系:
二.区别:
二.批量插入数据到数据的逐步优化
一.使用Statement
二.使用PreparedStatement插入
三.使用batch缓存插入
四.改变提交的时机控制提交次数提高效率
一.PreparedStatement和Statement的区别去联系
一.preparedStatement与Statement的联系:
1.都是sun公司下的jdbc包装类中的接口,不属于外部连接;
2.reparedStatement是statement接口的子接口;
二.区别:
1.preparedStatement能最大提高系统性能,preparedStatement预编译sql语句,DBServer会对预编译的sql语句进行性能优化,预编译的sql语句在后续的批量插入时,可以被直接使用,不用再次编译,可提高读写速度
2.Statement语句中,即使操作相同的sql语句,但因为插入的内容不一样,会需要再次对sql语句进行编译,影响读写速度;
3.PreparedStatement可以防止sql注入;
4.使用PreparedStatement可以插入BLob流文件数据,而Statement无法插入Blob数据
5.使用Statement数据需要进行拼串,操作繁琐,还存在sql注入
二.批量插入数据到数据的逐步优化
一.使用Statement
二.使用PreparedStatement插入
//批量插入方式二:使用PreparedStatement插入public void testInsertInfo() throws Exception {Connection conn = null;PreparedStatement pst = null;String sql = "insert into user_tab(id,name) values(?,?)";try {long start = System.currentTimeMillis();conn = JDBCUtils.getConnection();pst = conn.prepareStatement(sql);for (int i = 1; i <20000 ; i++) {pst.setObject(1,i);pst.setObject(2,"name");pst.execute();}long end = System.currentTimeMillis();System.out.println("采用preparedStatement方式插入20000条数据花费的时间为:"+(end - start));}catch (Exception e){e.printStackTrace();}finally {JDBCUtils.closeResource(conn,pst);}}
三.使用batch缓存插入
//批量插入方式三:使用批处理插入/*1.使用 添加batch :addBatch() 执行batch:executeBatch() 清空Batch(): clearBatch();2.在连接数据的url后面配置这句话:?rewriteBatchedStatements=true3.批量插入数据使用的jdbc.jar必须实在5.7版本以上才支持*/@Testpublic void testInsertInfo2() {Connection conn = null;PreparedStatement pst = null;String sql = "insert into user_tab(id,name) values(?,?)";try{long start = System.currentTimeMillis();conn = JDBCUtils.getConnection();pst = conn.prepareStatement(sql);for (int i = 1; i <=20000 ; i++) {pst.setObject(1,i);pst.setObject(2,"name"+i);//1,添加batchpst.addBatch();//2.执行batch()if (i % 500 == 0){pst.executeBatch();//清空batchpst.clearBatch();}}long end = System.currentTimeMillis();System.out.println("采用batch插入20000条数据花费时间为:"+ (end - start));}catch (Exception e){e.printStackTrace();}finally {}}
四.改变提交的时机控制提交次数提高效率
public void testInsertInfo3(){Connection conn = null;PreparedStatement pst = null;String sql = "insert into user_tab(id ,name) values(?,?)";try {long start = System.currentTimeMillis();conn = JDBCUtils.getConnection();conn.setAutoCommit(false);pst = conn.prepareStatement(sql);for (int i = 1; i <= 200000; i++) {pst.setObject(1,i);pst.setObject(2,"name"+i);//添加缓存pst.addBatch();if(i % 500 == 0){//执行缓存pst.executeBatch();//清空缓存pst.clearBatch();}}conn.commit();long end = System.currentTimeMillis();System.out.println("采用设置不允许自动提交的方式的花费的时间:"+(end - start));}catch (Exception e){e.printStackTrace();}finally {JDBCUtils.closeResource(conn,pst);}}
【笔试面试考点】PreparedStatement和Statement的区别与联系批量插入数据的优化相关推荐
- Interview:算法岗位面试—上海某公司算法岗位技术(偏机器学习,证券基金行业)面试考点之进程与线程区别、GD改进的算法、ROC和AUC
Interview:算法岗位面试-上海某公司算法岗位技术(偏机器学习,证券基金行业)面试考点之进程与线程区别.GD改进的算法.ROC和AUC 导读:其实,考察的知识点,博主都做过,但是,emmm,这些 ...
- PreparedStatement和Statement的区别
PreparedStatement 和 Statement 的区别:1.PreparedStatement在使用时只需要编译一次,就可以运行多次,Statement每运行一次就编译一次,所以Prepa ...
- 【DB笔试面试164】在Oracle中,如何彻底停止expdp数据泵进程?
[DB笔试面试164]在Oracle中,如何彻底停止expdp数据泵进程? 真题1. 如何彻底停止 expdp 进程? 答案:许多同事在使用expdp命令时,不小心按了CTRL+C组合键,然后又输入e ...
- 【JDBC】PreparedStatement实现批量插入数据
题目:[JDBC]PreparedStatement实现批量插入数据 前言: PreparedStatement除了解决Statement的拼串.sql注入问题之外,还可以实现以下操作 Prepare ...
- PreparedStatement和Statement的区别和效率
同样也是在一次面试中问到的,当时回答说PreparedStatement比Statement效率高: 其实这个回答是错误的!掌握的还是不够! 一.PreparedStatement相比于Stateme ...
- java PreparedStatement和statement的区别
1. PreparedStatement接口继承Statement, PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象.2.作为 St ...
- JDBC 笔记4 PreparedStatement 与Statement 的区别
1 有安全性 PreparedStatement 可以由于不是使用拼接,防止了sql注入,提高了安全性. 2 更方便 PreparedStatement 可以自动对类型进行转换,代码可读性,可维护 ...
- 12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用
0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比 ...
- JAVA超全笔试/面试考试题.(500问)--第三章面试题全面收录
杂七杂八面试题收录(可能会有重复) 第一,谈谈final, finally, finalize的区别. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承) ...
最新文章
- Linux0.00内核为什么要自己设置0x80号陷阱门来调用write_char过程?
- (CV方向)精通C++,该如何学?
- LINUX系统中进程如何管理控制(一)
- 计算机数控装置论文,数控专业(论文)范文.doc
- Ubuntu20.04 NAT 网络配置
- pandas 批量读取excel_Pandas 批量处理文本表(示例代码)
- java如何读取文本,Java:如何读取文本文件
- Android Studio 使用笔记:工具窗口浮动与布局恢复
- php mysql 类型_php mysql bigint 类型
- wireshark的拆包与合并
- 用移动硬盘当系统盘,即插即用
- Golang 字符串
- 英国设计师发明不用手撑的雨伞
- Gym101635C Macarons
- 查询Mysql版本号的两种方法
- numpy-repeat
- 普元ESB服务器迁移方案总结
- 银河麒麟V10(飞腾2000+ ARM)环境下构建达梦V8数据库容器镜像
- 胡博君图解Java之eclipse下载地址和JDK下载和安装和环境变量配置
- 怎样建立产品体系?(三)- 什么是产品?
热门文章
- 模拟电子技术------半导体
- 数据结构查找-7-3 词频统计 (30 分)
- 特征,特征维度,特征深度
- 赤峰中考计算机考试软件,赤峰市2018中考信息测试题单项选择部分-初三信息技术试卷与试题.pdf...
- 智能体适能训练评估系统-体姿体态评估系统软件
- android HorizontalScrollView讲解
- 新建STVP工程配置问题及解决方法(STM8/STM32)
- windows无法格式化u盘_u盘无法格式化怎么办 DOS下u盘格式化方法【详解】
- linux shell 操作二进制文件(xxd、dd)
- SQL:OUTER JOIN用法详解