Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 批更新失败-回滚操作_Java_Mysql_Prepared Statement - Fatal编程技术网

Java 批更新失败-回滚操作

Java 批更新失败-回滚操作,java,mysql,prepared-statement,Java,Mysql,Prepared Statement,我创建了一个PreparedStatement,并在一个Batch中添加了一些数据 PreparedStatement ps = conn.PreparedStatement("INSERT into table (a, b) values (?, ?)"; ps.setInt(1, 1); ps.setInt(2, 2); ps.addBatch ps.setInt(1, 4); ps.setInt(2, 5); ps.addBatch 现在当我执行ps时,我得到了结果,现在假设ps

我创建了一个PreparedStatement,并在一个Batch中添加了一些数据

PreparedStatement ps = conn.PreparedStatement("INSERT into table (a, b) values (?, ?)";

ps.setInt(1, 1);
ps.setInt(2, 2);

ps.addBatch

ps.setInt(1, 4);
ps.setInt(2, 5);

ps.addBatch
现在当我执行ps时,我得到了结果,现在假设ps失败,然后我想一个接一个地插入记录,而不是在批处理模式下


如何提取准备好的语句,我可以获得大小,但不确定如何获得记录?

您能否先将记录逐个插入?如果您的DBMS支持事务(大多数现代的DBMS都支持事务),那么您可以将所有插入绑定到一个原子事务中,对于数据库的其他用户来说,这就像您一次添加了所有事务一样(请参见下面的伪代码)


你不能先把这些记录一个一个地插入吗?如果您的DBMS支持事务(大多数现代的DBMS都支持事务),那么您可以将所有插入绑定到一个原子事务中,对于数据库的其他用户来说,这就像您一次添加了所有事务一样(请参见下面的伪代码)


实际上,要求是,如果批量更新失败,那么我需要逐个插入记录并捕获该特定记录的异常。您仍然可以这样做-只需将e分配给一个变量并保留它,而不是打印消息(并在循环中执行,而不是按顺序写入所有内容)。如果您想在异常上停止,请不要在循环中捕获它。我不知道你为什么要先尝试批量更新-你无论如何都需要编写代码来执行单独的插入-为什么不首先使用它?实际上,要求是如果批量更新失败,然后我需要一个接一个地插入记录并捕获该特定记录的异常。您仍然可以这样做-只需将e分配给一个变量并保留它,而不是打印消息(并在循环中执行,而不是按顺序写入所有内容)。如果您想在异常上停止,请不要在循环中捕获它。我不确定您为什么要先尝试批处理更新-无论如何,您需要编写代码来执行单独的插入-为什么不首先使用它?
connection.setAutoCommit(false);
try{
    insert(1,2);
}
catch(Exception e){
    System.out.println("1, 2 didn't work");
}
try{
    insert(4,5);
}
catch(Exception e){
    System.out.println("4, 5 didn't work");
}
connection.commit();