使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试:

public void exec(Connection conn){

try {

//开始时间

Long beginTime = System.currentTimeMillis();

//设置手动提交

conn.setAutoCommit(false);

Statement st = conn.createStatement();

for(int i=0;i<100000;i++){

String sql="insert into t1(id) values ("+i+")";

st.executeUpdate(sql);

}

//结束时间

Long endTime = System.currentTimeMillis();

System.out.println("st:"+(endTime-beginTime)/1000+"秒");//计算时间

st.close();

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

//2.使用PreparedStatement对象

public void exec2(Connection conn){

try {

Long beginTime = System.currentTimeMillis();

conn.setAutoCommit(false);//手动提交

PreparedStatement pst = conn.prepareStatement("insert into t1(id) values (?)");

for(int i=0;i<100000;i++){

pst.setInt(1, i);

pst.execute();

}

conn.commit();

Long endTime = System.currentTimeMillis();

System.out.println("pst:"+(endTime-beginTime)/1000+"秒");//计算时间

pst.close();

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

//3.使用PreparedStatement + 批处理

public void exec3(Connection conn){

try {

conn.setAutoCommit(false);

Long beginTime = System.currentTimeMillis();

//构造预处理statement

PreparedStatement pst = conn.prepareStatement("insert into t1(id) values (?)");

//1万次循环

for(int i=1;i<=100000;i++){

pst.setInt(1, i);

pst.addBatch();

//每1000次提交一次

if(i%1000==0){//可以设置不同的大小;如50,100,500,1000等等

pst.executeBatch();

conn.commit();

pst.clearBatch();

}

}

Long endTime = System.currentTimeMillis();

System.out.println("pst+batch:"+(endTime-beginTime)/1000+"秒");

pst.close();

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

在Oracle 10g中测试,结果:

1.使用statement  耗时142秒;

2.使用PreparedStatement 耗时56秒;

3.使用PreparedStatement + 批处理耗时:

a.50条插入一次,耗时5秒;

b.100条插入一次,耗时2秒;

c.1000条以上插入一次,耗时1秒;

通过以上可以得出结论,在使用jdbc大批量插入数据时,明显使用第三种方式(PreparedStatement + 批处理)性能更优。

-------------------------------------------------------------------------------------------------------------------------------

普通方式处理大量数据的insert时,处理速度相当慢。

*/

PreparedStatement ps = null;

//循环10000次

for(int i = 0; i

ps = con.prepareStatement(sql);

ps.executeUpdate();

}

方法二:通过addBatch()的方式,将数据缓存在对象里面,通过最后执行executeBatch();方法提交,因此速度会快很多!

*/

PreparedStatement ps = con.prepareStatement(sql);

for(int i = 0; i

ps.setString(1, "1");

ps.setString(2, "2");

ps.addBatch();

}

ps.executeBatch();

java数据库的优化_用Java向数据库中插入大量数据时的优化相关推荐

  1. java是什么格式_是java格式

    错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...

  2. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  3. 数据库插入大量数据时不要忘记先删除索引(小技巧)

    数据库插入大量数据时不要忘记先删除索引,插入完成后再重新建立索引,索引会非常影响插入数据的速度.

  4. jvm优化_使用Java流和In-JVM-Memory的超低延迟查询

    jvm优化 自然界的基本规则(例如光速和通用信息论)对我们可以从传统系统体系结构中获得的最大性能设置了明显的限制. 了解您作为Java开发人员如何使用JVM技术和Java流将性能提高几个数量级. 例如 ...

  5. java反射的优化_请问Java反射的性能为什么比直接调用慢一个数量级左右?

    Method.invoke()本身要用数组包装参数:而且每次调用都必须检查方法的可见性(在Method.invoke()里),也必须检查每个实际参数与形式参数的类型匹配性(在NativeMethodA ...

  6. java 7 锁优化_自Java 6/Java 7开始,Java虚拟机对内部锁的实现进行了一些优化。这些优化主要包括锁消除(Lock Elision)、锁粗化(Lock Coarse...

    自Java 6/Java 7开始,Java虚拟机对内部锁的实现进行了一些优化.这些优化主要包括锁消除(Lock Elision).锁粗化(Lock Coarsening).偏向锁(Biased Loc ...

  7. java 向 mysql数据库存储图片_基于java向mysql数据库中存取图片

    import java.io.*; import java.sql.*; import java.sql.DriverManager; import java.sql.ResultSet; impor ...

  8. java 添加gif图片_一个简单的数据库插入gif图片,帮我看看哪里不对

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 执行的时候异常: Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4 ...

  9. 超市管理系统java swing+mysql报告_基于java+swing+mysql的超市管理系统

    运行环境:java jdk 1.8 IDE环境:Eclipse,Myeclipse,IDEA都可以 硬件环境:windows 7/8/10 2G内存以上(推荐4G,4G以上更好) 可以实现: 销售管理 ...

最新文章

  1. Marathon 0.15: 更稳定 更多数据 更易用
  2. mysql 二进制转字符串_MySql字符转义 | 学步园
  3. linux取消中文网,SELinux如何关闭
  4. mysql查询表中名字包含某个字符_查询当前数据库中所有用户表中哪些字段包含某个字符串...
  5. 新iPhone将采用更大容量电池:最低3110mAh?
  6. console vue 打包之后怎么去掉_Vue Cli 3 打包配置--自动忽略 console.log 语句
  7. 记录一个可以word,xls,PDF互转思维导图的工具
  8. 万字长文深度分析华为智能汽车战略
  9. 冲压模具是冲压生产必不可少的工艺装备
  10. linux-----基本操作指令(2)
  11. c++---------虚函数及继承(一)
  12. MVC5-Scaffolder
  13. 智多星骗子:骗钱的手段太高超
  14. windows企微应用双开/多开
  15. PDF删除水印怎么在PDF编辑软件内执行
  16. Django+Vue实现增删改查操作
  17. 传感器的低频响应和截止频率
  18. bzoj 4605 崂山白花蛇草水
  19. 手机电源键关不了屏幕_手机死机关不了机怎么办
  20. ANSI编码文件批量转换为UTF-8编码小tips

热门文章

  1. ctr 平滑_CTR平滑的原理,包懂!!!附代码
  2. android 获取元素的下标_Appium中定位方式by_android_uiautomator
  3. idea会不定时闪屏_显示器闪屏什么原因
  4. 二元偏导数存在的条件_多元函数 可导、可微、连续、一阶偏导数连续 之间关系的总结...
  5. 手机版python3.6.6的requests库下载_Python爬虫之Python3.6 Requests库的基本使用方法
  6. C/S简易UI框架开发总结(2)
  7. JavaScript三种创建构造函数的方式
  8. 《Inside C#》笔记(二) 初识C#
  9. C# 读写ini配置文件demo
  10. 在MFC的picture控件中如何显示Mat图