[英]Statement.execute(sql) vs executeUpdate(sql) and executeQuery(sql)
我有一个与此方法相关的问题: st.execute(sql);
其中 st 显然是一个 Statement 对象。 直接来自这个oracle java教程:
execute:如果查询返回的第一个对象是 ResultSet 对象,则返回 true。 如果查询可以返回一个或多个 ResultSet 对象,请使用此方法。 通过重复调用 Statement.getResutSet 来检索从查询返回的 ResultSet 对象。
“一个或多个 ResultSet 对象”是什么意思? 一旦获得了ResultSet
数组,如何管理它们? 而st.executeQuery(sql)
和st.executeUpdate(sql)
则非常清楚。 这不是(至少对我而言) st.execute(sql)
) 的目标,它也可以返回一个 int ,就好像它更新了一个表一样。
提前致谢
boolean execute():执行这个Prepared Statement对象中的SQL语句,可以是任何一种SQL语句。
ResultSet executeQuery():在这个Prepared Statement对象中执行SQL查询,返回查询生成的ResultSet对象。
int executeUpdate():执行这个Prepared Statement对象中的SQL语句,必须是SQL INSERT、UPDATE或DELETE语句; 或不返回任何内容的 SQL 语句,例如 DDL 语句。
寻找此类问题答案的最佳地点是 Javadocs: 这里
“一个或多个 ResultSet 对象”是什么意思?
execute
方法的 javadoc 是这样说的:
"执行给定的 SQL 语句,它可能返回多个结果。在某些(不常见的)情况下,单个 SQL 语句可能返回多个结果集和/或更新计数。通常您可以忽略这一点,除非您 (1) 执行存储过程您知道可能会返回多个结果或 (2) 您正在动态执行未知的 SQL 字符串。 ”
这几乎解释了它。 有时一个查询可以提供多个ResultSet
。
如果是这样,一旦获得了 ResultSet 数组,如何管理它们?
我不确定你的意思,但是:
这不是(至少对我而言) st.execute(sql) 的目标,它也可以返回一个 int ,就好像它更新了一个表一样。
execute
一个用途是执行 SQL 语句,如果您不知道它是查询、更新(某种类型的)……或其他可能提供多个结果集的东西。 它是executeQuery()
和executeUpdate()
的概括......
execute() :用于所有类型的 SQL 语句的方法,即返回布尔值 TRUE 或 FALSE。 如果该方法返回 TRUE,则返回 ResultSet 对象,FALSE 返回 int 值。
executeUpdate() :此方法用于执行 DML 语句(INSERT、UPDATE 和 DELETE),该语句返回 int 值,受影响行的计数。
executeQuery() :此方法用于使用 SELECT 查询从数据库中检索数据。 此方法返回根据查询返回数据的 ResultSet 对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.