发表于: 2018-10-14 21:52:36
1 589
今天完成的事情:
一,JDBC双重for循环批量插入
package com;
import org.junit.Test;
import java.sql.*;
public class Tesk {
@Test
public void insert(){
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获取开始时间
long start=System.currentTimeMillis();
//sql后缀
String prefix = "INSERT INTO students(name,qq,wish,school,enrolment_time,type,know_from,create_at,update_at) VALUES";
{
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/new?rewriteBatchedStatements=true&characterEncoding=utf8&useSSL=false",
"root","123456789");
//保存SQL后缀
StringBuffer suffix = new StringBuffer();
// 设置事务非自动提交
conn.setAutoCommit(false);
//Statement st = conn.createStatement();
//比起st,pst会更好些
PreparedStatement pst = conn.prepareStatement("");
//外层循环,总提交事务次数
for (int i =1; i <=1;i++){
//第次提交步长
for (int j = 1; j <= 10;j++){
//构建SQL后缀
suffix.append("('斯祥',"+123456+",'即可了','就会',"+456+",'java','后来',"+9788+","+954+"),");
}
//构建完整SQL
String sql = prefix + suffix.substring(0, suffix.length() - 1);
// System.out.println(sql);
//添加执行SQL
pst.addBatch(sql);
// 执行操作
pst.executeBatch();
// 提交事务
conn.commit();
// 清空上一次添加的数据
suffix = new StringBuffer();
}
// 头等连接
//关闭连接
pst.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
long end=System.currentTimeMillis();
//获取结束时间
System.out.println("程序运行时间: "+(end-start)+"ms");
}
}
二,创建索引对比建索引和不建索引的效率查别
有索引插入100万条数据
有索引插入3000万条数据
根据id查找信息
删除索引
无索引插入100万条数据
无索引插入3000万条数据
根据id查找信息
根据上面的有无索引状态下进行插入数据以及查询数据
我们可以得出结论:
在有索引状态下,插入批量插入数据比没有索引状态下要慢
在有索引状态下,查询数据比没有索引状态下要快
三,测试一下连接DB中断后TryCatch是否能正常处理。
关闭mysql服务 net stop mysql
出现异常,数据库没有接收到信息,连接中断
明天计划的事情:
回顾任务一,深入了解,并熟练使用Jdbc、Jdbctemplate、mybatis和Spring+Mybatis
遇到的问题:
无
收获:
了解了如何使用双重for循环进行批量插入
评论