关于JDBC批量操作中异常BatchUpdateException的getUpdateCounts()方法
我想要批量添加数据,如果数据个别有错误则记录并跳过继续运行后面的,在BatchUpdateException捕获异常中,getUpdateCounts()在Stateme...
我想要批量添加数据,如果数据个别有错误则记录并跳过继续运行后面的,在BatchUpdateException捕获异常中,getUpdateCounts()在Statement拼SQL之后addBatch(sql)的办法就可以正确显示出成功录入的行数,但是用PreparedStatement方法设入数据后提交,getUpdateCounts()显示的都是该次批量的总行数,无法正确显示已经成功录入了多少行,不知道这是不是JDBC的BUG, 有没有遇到过这种情况的麻烦说下怎么解决的?
list = new ArrayList<Person>();
for (int i = 0; i < 200; i++) {
Person p = new Person();
if (i==27 || i==45 || i==3 || i==19 || i==165) {
p.setId(1);
}else {
p.setId(i);
}
p.setName(i+"===");
p.setAge(i);
list.add(p);
}
try {
for (Person person : list) {
st.addBatch("insert into test values("+person.getId()+",'"+person.getName()+"',"+person.getAge()+")");
// ps.setInt(1, person.getId());
// ps.setString(2, person.getName());
// ps.setInt(3, person.getAge());
// ps.addBatch();
}
int[] ints = st.executeBatch();
System.out.println(ints.length+"======");
}catch (BatchUpdateException e) {
e.printStackTrace();
System.out.println(e.getUpdateCounts().length+"---------");
}
求解 没有多少分 谢谢各位大神了 这是我一个测试程序 主键是ID 想让他抛异常 展开
list = new ArrayList<Person>();
for (int i = 0; i < 200; i++) {
Person p = new Person();
if (i==27 || i==45 || i==3 || i==19 || i==165) {
p.setId(1);
}else {
p.setId(i);
}
p.setName(i+"===");
p.setAge(i);
list.add(p);
}
try {
for (Person person : list) {
st.addBatch("insert into test values("+person.getId()+",'"+person.getName()+"',"+person.getAge()+")");
// ps.setInt(1, person.getId());
// ps.setString(2, person.getName());
// ps.setInt(3, person.getAge());
// ps.addBatch();
}
int[] ints = st.executeBatch();
System.out.println(ints.length+"======");
}catch (BatchUpdateException e) {
e.printStackTrace();
System.out.println(e.getUpdateCounts().length+"---------");
}
求解 没有多少分 谢谢各位大神了 这是我一个测试程序 主键是ID 想让他抛异常 展开
2个回答
2015-02-02
展开全部
此类问题的出现主要来自三个方面。
1、 SQL语句中存在语法错误或是传入的数据有误;
2、 数据库的配置不合法,或者说是配置有误。较容易出现的有数据表的映射文件(,hbm.xml文件)配置有误;Hibernate.cfg.xml文件配置有误;
3、 当前的数据库用户权限不足,不能操作数据库。以是以Oracle 数据库为例,这种情况下在错误提示中会显示java.sql.BatchUpdateException: ORA-01031: insufficient privileges这样的信息。
1、 SQL语句中存在语法错误或是传入的数据有误;
2、 数据库的配置不合法,或者说是配置有误。较容易出现的有数据表的映射文件(,hbm.xml文件)配置有误;Hibernate.cfg.xml文件配置有误;
3、 当前的数据库用户权限不足,不能操作数据库。以是以Oracle 数据库为例,这种情况下在错误提示中会显示java.sql.BatchUpdateException: ORA-01031: insufficient privileges这样的信息。
追问
完全不是这个问题 ………
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询