是否存在使用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
}
我为什么要问?我目前总是检查以确保返回的行数等于1,但我不知道如果它应该永远不会返回除1以外的任何内容,那是否过度。
答案 0 :(得分: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());
打印0
。
我使用executeUpdate
的返回值的唯一时间是在一行上使用DELETE
语句,以确保它之前存在并被删除。我认为你不应该将它与INSERT
一起使用。
答案 1 :(得分:1)
对于您提供的示例SQL或任何从参数插入单行的SQL,如果没有发生SQLException,结果将始终为1.
答案 2 :(得分:1)
来自executeUpdate()
方法的documentation:
返回:(1)SQL数据操作语言的行数 (DML)语句或(2)0表示不返回任何内容的SQL语句
0似乎是一个非常自然的结果(即不是错误)。
答案 3 :(得分:-1)
再次阅读:
返回:(A)SQL数据操作语言(DML)语句的行数,或者(B)0不返回任何值的SQL语句的行数