Java 语句.execute(sql)vs executeUpdate(sql)和executeQuery(sql)

Java 语句.execute(sql)vs executeUpdate(sql)和executeQuery(sql),java,jdbc,resultset,Java,Jdbc,Resultset,我有一个与此方法相关的问题:st.execute(sql)其中st显然是一个语句对象。 直接从oracle java教程: 执行:如果查询返回的第一个对象是 结果集对象。如果查询可以返回一个或多个值,请使用此方法 更多ResultSet对象。检索从返回的ResultSet对象 通过重复调用Statement.getResutSet来执行查询 “一个或多个ResultSet对象”是什么意思?一旦获得一个结果集数组,如何管理它们? 而st.executeQuery(sql)和st.executeUp

我有一个与此方法相关的问题:
st.execute(sql)其中st显然是一个语句对象。
直接从oracle java教程:

执行:如果查询返回的第一个对象是 结果集对象。如果查询可以返回一个或多个值,请使用此方法 更多ResultSet对象。检索从返回的ResultSet对象 通过重复调用Statement.getResutSet来执行查询

“一个或多个ResultSet对象”是什么意思?一旦获得一个
结果集数组
,如何管理它们? 而
st.executeQuery(sql)
st.executeUpdate(sql)
非常清楚。它不是(至少对我来说)st.execute(sql)
的目标,它还可以返回一个int,就好像它是在一个表中更新的一样

提前谢谢

“一个或多个ResultSet对象”是什么意思

execute
方法的javadoc说明:

执行给定的SQL语句,该语句可能会返回多个结果。在某些(不常见)情况下,单个SQL语句可能会返回多个结果集和/或更新计数。通常,您可以忽略这一点,除非您正在(1)执行您知道可能返回多个结果的存储过程或(2)您正在动态执行未知的SQL字符串。“

这很好地解释了这一点。有时一个查询可以传递多个
结果集

如果是这样的话,那么一旦得到一系列结果集,如何管理它们呢

我不知道你的意思,但是:

  • 不能将它们作为数组获取:必须一次获取一个,然后
  • 您可以将结果集放入数组中
它不是(至少对我来说)st.execute(sql)的目标,它还可以像更新表一样返回int

execute
的一个用途是,如果您不知道SQL语句是否是查询、更新(某种类型)。。。或者其他可能提供多个结果集的内容。它是
executeQuery()
executeUpdate()

布尔执行(): 执行此准备好的语句对象中的SQL语句,该对象可以是任何类型的SQL语句

ResultSet executeQuery(): 在此准备好的语句对象中执行SQL查询,并返回查询生成的ResultSet对象

int executeUpdate(): 在此准备好的语句对象中执行SQL语句,该对象必须是SQL INSERT、UPDATE或DELETE语句;或不返回任何内容的SQL语句,例如DDL语句

找到此类问题答案的最佳地方是Javadocs:

execute():用于所有类型SQL语句的方法,即返回布尔值TRUE或FALSE。如果该方法返回TRUE,则返回ResultSet对象,FALSE返回int值

executeUpdate():此方法用于执行DML语句(INSERT、UPDATE和DELETE),该语句返回int值,即受影响行的计数


executeQuery():此方法用于使用SELECT查询从数据库检索数据。此方法返回根据查询返回数据的ResultSet对象

(编辑注意-我故意将引用块和斜体字一起用于引用权威文档中的内容,而仅引用原始问题或评论中的引用块。请不要干扰格式。如果在浏览器中阅读斜体字时遇到问题,请更改默认字体或文本大小…)javadocs的链接应该是