【发布时间】:2012-09-06 05:30:31
【问题描述】:
在管理工作室和executeUpdate 中工作的查询使相同的executeUpdate 返回-1,这在我们可以找到的任何文档中都未定义。它应该只返回行数或0。这是什么意思?如果这很重要,驱动程序就是 JDBC-ODBC 桥。
例子:
String query = "IF NOT EXISTS (SELECT * FROM animals WHERE animal_name ='" + a +"') INSERT INTO " + table + " (animal_name, animal_desc, species_id) VALUES ('" + a + "', '" + b + "', " + c + ")";
int result = statement.executeUpdate(query);
System.out.println(result);
查询有效,当行被添加到数据库时,它返回 -1 很奇怪,文档说它只会返回 0 或行数(我已经更正了)。
更新:
在 Management Studio 中运行此命令会导致“命令成功完成”。
IF NOT EXISTS (SELECT * FROM animals WHERE animal_name = 'a')
INSERT INTO animals(animal_name, animal_desc, species_id) VALUES ('a', 'a', 1)
这应该意味着该方法应该返回 0,因为它不返回任何内容,对吗?
【问题讨论】:
-
你能给我们一段代码吗?
-
我很想看看你的代码。而且你有点不正确,当你说
executeUpdate(...)应该只返回 1 或 0...它实际上返回 要么 (1) SQL 数据操作的行数语言 (DML) 语句或 (2) 0 用于不返回任何内容的 SQL 语句 -
不能为 -1。 executeUpdate() 为 INSERT、UPDATE 或 DELETE 语句返回行数,或者为不返回任何内容的 SQL 语句返回 0
-
用代码和更正更新了问题。
-
@MaVRoSCy 是的,我们使用的是 SQL Server 2008。
标签: java sql sql-server-2008 jdbc