Statement.execute(sql)vs executeUpdate(sql)和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,就好像它更新了一个表。

提前致谢

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

execute方法的javadoc说:

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

这几乎解释了它。 有时,查询可以提供多个ResultSet

如果是这样,一旦得到一个ResultSet数组怎么可能管理它们?

我不确定你的意思,但是:

  • 你不能把它们作为一个数组:你必须一次得到它们,并且
  • 你可以把ResultSet放到一个数组中……

它不是(至少对我来说)st.execute(sql)的目的,它也可以返回一个int,就好像它更新了一个表。

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

boolean execute():执行此Prepared Statement对象中的SQL语句,该对象可以是任何类型的SQL语句。

ResultSet executeQuery():在此Prepared Statement对象中执行SQL查询,并返回查询生成的ResultSet对象。

int executeUpdate():执行此Prepared Statement对象中的SQL语句,该语句必须是SQL INSERT,UPDATE或DELETE语句; 或者不返回任何内容的SQL语句,例如DDL语句。

找到像这样的问题答案的最佳地方是Javadocs: Here