JDBC-批量操作的行数限制
2012-02-20 15:39
274 查看
1 任务前提
我之前有一个任务,写一段JDBC程序,实现两个不同系统中人员信息的同步,简单说明一下,一个系统中人员表 ASYSEMPTable中7万条数据,通过程序的方法
把这7万数据读出到一个data集合对象中,然后通过这个对象把数据批量插入到另一个系统中人员表empInfo中去。
2 原来的做法和问题
PreparedStatement smst = null;
try {
smst = conn.prepareStatement("insert into empInfo(name,age,addr)values(?,?,?)");
for(int i=0;i<data.getNumRows();i++){
data.setRow(i);
批量插入格式
smst.setString(1, data.getString("cols1"));
smst.setString(2, data.getString("cols2"));
smst.setString(3, data.getString("cols3"));
smst.addBatch();
}
smst.executeBatch();
}
catch(Exception e) {
throw e;
}
finally {
if ( smst != null ) {
smst.close();
}
}
程序顺利执行,没有任何报错,但在empInfo表中只有295条记录,其它的记录莫名奇妙的都没有。
刚开始以为是第296条记录有问题,程序不再插入了,也没有报错。后来删除第296条记录,297条记录,程序没有报错,但大部分的记录还是没有插入进来。
3 问题原因和解决方案
原来jdbc 批量处理 有一个处理最大行数的隐含限制。最大的处理行数是65536条记录。如果超出这个最大行数,程序插入就会出问题。解决的方法是批量分配提交。
PreparedStatement smst = null;
try {
smst = conn.prepareStatement("insert into empInfo(name,age,addr)values(?,?,?)");
for(int i=0;i<data.getNumRows();i++){
data.setRow(i);
批量插入格式
smst.setString(1, data.getString("cols1"));
smst.setString(2, data.getString("cols2"));
smst.setString(3, data.getString("cols3"));
smst.addBatch();
// 批量-分批提交数据 每60000条数据一提交。
if(( i + 1 )%60000==0){
smst.executeBatch();
}
//end
}
// 剩下的10000条记录最后提交。
smst.executeBatch();
}
catch(Exception e) {
throw e;
}
finally {
if ( smst != null ) {
smst.close();
}
}
我之前有一个任务,写一段JDBC程序,实现两个不同系统中人员信息的同步,简单说明一下,一个系统中人员表 ASYSEMPTable中7万条数据,通过程序的方法
把这7万数据读出到一个data集合对象中,然后通过这个对象把数据批量插入到另一个系统中人员表empInfo中去。
2 原来的做法和问题
PreparedStatement smst = null;
try {
smst = conn.prepareStatement("insert into empInfo(name,age,addr)values(?,?,?)");
for(int i=0;i<data.getNumRows();i++){
data.setRow(i);
批量插入格式
smst.setString(1, data.getString("cols1"));
smst.setString(2, data.getString("cols2"));
smst.setString(3, data.getString("cols3"));
smst.addBatch();
}
smst.executeBatch();
}
catch(Exception e) {
throw e;
}
finally {
if ( smst != null ) {
smst.close();
}
}
程序顺利执行,没有任何报错,但在empInfo表中只有295条记录,其它的记录莫名奇妙的都没有。
刚开始以为是第296条记录有问题,程序不再插入了,也没有报错。后来删除第296条记录,297条记录,程序没有报错,但大部分的记录还是没有插入进来。
3 问题原因和解决方案
原来jdbc 批量处理 有一个处理最大行数的隐含限制。最大的处理行数是65536条记录。如果超出这个最大行数,程序插入就会出问题。解决的方法是批量分配提交。
PreparedStatement smst = null;
try {
smst = conn.prepareStatement("insert into empInfo(name,age,addr)values(?,?,?)");
for(int i=0;i<data.getNumRows();i++){
data.setRow(i);
批量插入格式
smst.setString(1, data.getString("cols1"));
smst.setString(2, data.getString("cols2"));
smst.setString(3, data.getString("cols3"));
smst.addBatch();
// 批量-分批提交数据 每60000条数据一提交。
if(( i + 1 )%60000==0){
smst.executeBatch();
}
//end
}
// 剩下的10000条记录最后提交。
smst.executeBatch();
}
catch(Exception e) {
throw e;
}
finally {
if ( smst != null ) {
smst.close();
}
}
相关文章推荐
- JDBC之数据库的增,删,改,查, 搜, 批量执行,获取表结构,获取某一用户下所有的表,滚轴操作的封装
- Spring JDBC 常用批量操作及插入操作
- springjdbc的批量操作
- jdbc的批量操作
- jdbc批量执行SQL insert 操作
- hibernate 批量操作 hibernate.jdbc.batch_size hibernate.jdbc.fetch_size
- JDBC批量操作数据库数据的内存限制
- JDBC获取自增主键,批量操作
- JDBC之批量操作与注意事项浅析
- oracle事务处理及实例演示jdbc操作批量删除
- JDBC的批量操作Batch
- oracle事务处理及实例演示jdbc操作批量删除
- T-SQL大批量操作数据的时候限制受影响行数的方法
- Spring JDBC Framework详解——批量JDBC操作、ORM映射
- jdbc 连接数据库、批量操作、事务(oracle、mysql)
- T-SQL大批量操作数据的时候限制受影响行数的方法
- JDBC的批量插入操作
- JDBC操作Vertica数据库,用PreparedStatements对象实现批量插入数据
- Spring 对JDBC操作(实现增删改查,批量添加功能)
- Java JDBC 进行批量跟新操作