public static void main(String[] args) throws SQLException {
// TODO Auto-generated method stub
HashMap<Object,Integer> data = getData();
Object[] str = new Object[9];
int[] nums = {3,7,9,10,5,8,3,2};
Connection conn = AccessDatabase.getConnection();
conn.setAutoCommit(false);
PreparedStatement pst = conn.prepareStatement("Insert into orgnization_code (number) VALUES(?)"); // 生成查询语句,关键词以?代替
int j=0;
for(Object obj: data.keySet()){
//1
str[0] = obj;
for(Object obj1:data.keySet()){
//2
str[1] = obj1;
for(Object obj2:data.keySet()){
//3
str[2] = obj2;
for(Object obj3:data.keySet()){
//4
str[3] = obj3;
for(Object obj4:data.keySet()){
//5
str[4] = obj4;
for(Object obj5:data.keySet()){
//6
str[5] = obj5;
for(Object obj6:data.keySet()){
//7
str[6] = obj6;
for(Object obj7:data.keySet()){
//8
str[7] = obj7;
int sum = 0;
for(int i=0;i<nums.length;i++){
sum += data.get(str[i])*nums[i];
}
int result = 11-sum%11;
if( result == 11){
str[8] = 0;
}else if(result == 10){
str[8] = "X";
} else{
str[8] = result;
}
pst.setString(1, myToString(str));//按查询语句中的索引位置进行值替换
pst.addBatch();
<span style="white-space:pre"> </span>// 设置批量插入的值大小
if(j%1000==0){//可以设置不同的大小;如50,100,500,1000等等
pst.executeBatch();
conn.commit();
pst.clearBatch();
}
System.out.println(j);
j++;
}
}
}
}
}
}
}
}
}
使用JDBC向Mysql中插入根据组织代码规则生成的万亿条字符串代码,如果按照传统的生成一条差一条,由于访问数据库频率过快,在一段时间之后,会报空指针异常:
为了满足需求,且在速度上进行优化,可以采用PreparedStatement+批处理来进行插入。优化之后的截图如下:
优化之后,平均每分钟100w次插入的速度。具体代码如下: