在PrepERT上,PreparedStatement.executeUpdate()是否可以返回0?

Usm*_*kil 1 java sql jdbc

是否存在executeUpdate使用PreparedStatement对象上的方法执行的SQL INSERT语句返回0而不抛出SQLException的任何条件?

例如:

String query = "INSERT INTO mytable (column1,column2) VALUES (5,6)";
PreparedStatement preparedStatement = connection.prepareStatement(query);
if(preparedStatement.executeUpdate()!=1){
// A strange error has occurred
} else{
// do what ever
}
Run Code Online (Sandbox Code Playgroud)

我为什么这么问?我目前总是检查以确保返回的行数等于1,但我不知道如果它应该永远不会返回除1以外的任何东西,那是否过度.

Sot*_*lis 8

所以我尝试了,是的,你可以0通过INSERT声明获得返回值.如果您SELECT * FROM的表没有行INTO另一个表,则会发生这种情况.例如,说domain并且domain2具有相同的模式并且domain2为空,执行以下操作

Connection con = dataSource.getConnection();
PreparedStatement ps = con.prepareStatement("INSERT INTO domain SELECT * FROM domain2");
System.out.println(ps.executeUpdate());
Run Code Online (Sandbox Code Playgroud)

打印0.

我曾经使用过返回值的唯一一次executeUpdateDELETE在一行上有一个语句,以确保它之前存在并被删除.我不认为你应该使用它INSERT.