PreparedStatement executeBatch() 遇到错误时,如何继续?

大黑山唐僧 2013-05-02 03:24:34
比如sql语句中有主键冲突,批量执行时,一条冲突,会导致整个batch执行失败,一条记录也插不进去。实例代码如下:


public void test()
{
Connection conn = null;
PreparedStatement pStmt = null;
String sql = "insert into user(uid, screen_name) values(?, ?)";

try {
conn = DB.getConn();
conn.setAutoCommit(false);
pStmt = DB.getpStmt(conn, sql);

pStmt.setString(1, "111111");
pStmt.setString(2, "aaaaaa");
pStmt.addBatch();

pStmt.setString(1, "222222");
pStmt.setString(2, "bbbbbb");
pStmt.addBatch();

pStmt.setString(1, "333333");
pStmt.setString(2, "cccccc");
pStmt.addBatch();

pStmt.setString(1, "333333");
pStmt.setString(2, "dddddd");
pStmt.addBatch();

pStmt.executeBatch();
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
} finally
{
try {
if(pStmt != null)
{
pStmt.close();
}
if(conn != null)
{
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}

}

运行会提示如下错误:
java.sql.BatchUpdateException: Duplicate entry '333333' for key 'PRIMARY'
at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:652)
at DAO.UserDAO.test(UserDAO.java:38)
at DAO.UserDAO.main(UserDAO.java:63)


有没有什么方法,在执行batch时,遇到一条sql执行失败,能够忽略它继续执行?
我能想到的是,利用异常处理部分,找到是哪几行有问题,删掉再重新执行,挺麻烦,好像不太容易实现

PS:用的是java语言,mysql数据库
...全文
462 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
大黑山唐僧 2013-05-05
  • 打赏
  • 举报
回复
引用 1 楼 fei1710 的回复:
一条一条执行不行吗
太慢啊,好多数据
fei1710 2013-05-03
  • 打赏
  • 举报
回复
一条一条执行不行吗

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧