Statement.execute(sql)vs executeUpdate(sql)和executeQuery(sql)

时间:2013-05-18 15:00:28

标签: java jdbc resultset

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

  

execute:如果查询返回的第一个对象是a,则返回true   ResultSet对象。如果查询可以返回一个或,则使用此方法   更多ResultSet对象。检索从中返回的ResultSet对象   通过重复调用Statement.getResutSet来查询。

一个或多个ResultSet对象 ”是什么意思?一旦得到ResultSet数组,怎么可能管理它们? 而st.executeQuery(sql)st.executeUpdate(sql)非常明确。它(至少对我来说)并不是st.execute(sql)的目标,它也可以返回一个int,好像它已经更新了一个表。

提前致谢

2 个答案:

答案 0 :(得分:12)

  

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

execute方法的javadoc说明了这一点:

  

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

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

  

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

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

  • 你不能把它们作为一个数组:你必须一次得到它们,
  • 您可以将ResultSet放入数组......
  

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

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

的概括

答案 1 :(得分:9)

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