Statement.execute(sql) 与 executeUpdate(sql) 和 executeQuery(sql)
Posted
技术标签:
【中文标题】Statement.execute(sql) 与 executeUpdate(sql) 和 executeQuery(sql)【英文标题】:Statement.execute(sql) vs executeUpdate(sql) and executeQuery(sql) 【发布时间】:2013-05-13 14:27:33 【问题描述】:我有一个与此方法相关的问题:st.execute(sql);
其中 st 显然是一个 Statement 对象。
直接来自thisoracle java教程:
execute:如果查询返回的第一个对象是一个 结果集对象。如果查询可以返回一个或 更多 ResultSet 对象。检索从返回的 ResultSet 对象 通过重复调用 Statement.getResutSet 进行查询。
“一个或多个 ResultSet 对象”是什么意思?一旦获得ResultSet
的数组,如何管理它们?
而st.executeQuery(sql)
和st.executeUpdate(sql)
非常清楚。这不是(至少对我而言)st.execute(sql)
的目标,它也可以返回一个 int,就好像它更新了一个表一样。
提前致谢
【问题讨论】:
【参考方案1】:布尔执行(): 执行此 Prepared Statement 对象中的 SQL 语句,可以是任何类型的 SQL 语句。
结果集 executeQuery(): 执行此 Prepared Statement 对象中的 SQL 查询,并返回查询生成的 ResultSet 对象。
int executeUpdate(): 执行此 Prepared Statement 对象中的 SQL 语句,该语句必须是 SQL INSERT、UPDATE 或 DELETE 语句;或不返回任何内容的 SQL 语句,例如 DDL 语句。
寻找此类问题答案的最佳位置是 Javadocs: Here
【讨论】:
【参考方案2】:execute() : 用于所有类型 SQL 语句的方法,即返回布尔值 TRUE 或 FALSE。如果方法返回 TRUE,则返回 ResultSet 对象,FALSE 返回 int 值。
executeUpdate() : 该方法用于执行 DML 语句(INSERT、UPDATE 和 DELETE),返回 int 值,受影响的行数。
executeQuery() : 此方法用于使用 SELECT 查询从数据库中检索数据。该方法返回根据查询返回数据的ResultSet对象。
【讨论】:
【参考方案3】:“一个或多个 ResultSet 对象”是什么意思?
execute
方法的 javadoc 是这样写的:
"执行给定的 SQL 语句,它可能会返回多个结果。在某些(不常见的)情况下,单个 SQL 语句可能会返回多个结果集和/或更新计数。通常您可以忽略这一点,除非您是 ( 1) 执行一个您知道可能返回多个结果的存储过程或 (2) 您正在动态执行一个未知的 SQL 字符串。"
这几乎解释了它。有时一个查询可以提供多个ResultSet
。
如果是这样,一旦获得了一个 ResultSet 数组,如何管理它们?
我不确定你的意思,但是:
您不能将它们作为一个数组获取:您必须一次获取一个,并且 您可以将 ResultSets 放入一个数组中...这不是(至少对我而言)st.execute(sql) 的目标,它也可以返回一个 int,就好像它更新了一个表一样。
execute
的一个用途是执行 SQL 语句,如果您不知道它是查询、更新(某种类型的)......还是其他可能提供多个结果集的东西。它是executeQuery()
和executeUpdate()
的概括...
【讨论】:
以上是关于Statement.execute(sql) 与 executeUpdate(sql) 和 executeQuery(sql)的主要内容,如果未能解决你的问题,请参考以下文章
即使进行了更改,Statement.execute() 也会返回 false
Can not issue data manipulation statements with executeQuery()的解决方案