在任何情况下,在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
语句获得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
一起使用。
对于您提供的示例SQL或要从参数插入一行的任何SQL,如果没有发生SQLException,则结果将始终为1。
从documentation方法的executeUpdate()
:
返回:要么(1)SQL数据操作语言的行数(DML)语句或(2)0(对于不返回任何内容的SQL语句)
0似乎是很自然的结果(即不是错误)。
再读一次:
返回:(A)SQL数据操作语言(DML)语句的行数或(B)0不返回任何内容的SQL语句的行数