PreparedStatement.executeUpdate()能否在INSERT上返回0?

问题描述 投票:1回答:4

在任何情况下,在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之外的东西,那是否太过分了?

java sql jdbc
4个回答
8
投票

所以我尝试了,是的,您可以使用0语句获得INSERT返回值。如果您SELECT * FROM一个没有行INTO另一个表的表,则会发生这种情况。例如,假设domaindomain2具有相同的架构,并且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
投票

对于您提供的示例SQL或要从参数插入一行的任何SQL,如果没有发生SQLException,则结果将始终为1。


1
投票

documentation方法的executeUpdate()

返回:要么(1)SQL数据操作语言的行数(DML)语句或(2)0(对于不返回任何内容的SQL语句)

0似乎是很自然的结果(即不是错误)。


0
投票

再读一次:

返回:(A)SQL数据操作语言(DML)语句的行数或(B)0不返回任何内容的SQL语句的行数

© www.soinside.com 2019 - 2024. All rights reserved.