我有一个与这个方法相关的问题:st.execute(sql);
,其中st显然是一个Statement对象。直接从这个oracle java教程:
execute:如果查询返回的第一个对象是a,则返回trueResultSet对象。如果查询可以返回一个或更多ResultSet对象。获取返回的ResultSet对象通过重复调用Statement.getResutSet来查询。
"一个或多个ResultSet对象"是什么意思?一旦获得ResultSet
阵列,如何可能管理它们?而st.executeQuery(sql)
和st.executeUpdate(sql)
则很明显。这不是(至少对我来说)st.execute(sql)
的目的,它也可以返回一个int,就好像它更新了一个表。
Thanks in advance
布尔执行():执行这个Prepared statement对象中的SQL语句,该对象可以是任何类型的SQL语句。
ResultSet executeQuery (): 执行此Prepared Statement对象中的SQL查询,并返回查询生成的ResultSet对象。
int executeUpdate (): 执行prepare statement对象中的SQL语句,该SQL语句必须是SQL INSERT、UPDATE或DELETE语句;或不返回任何结果的SQL语句,如DDL语句。
找到这类问题答案的最好地方是Javadocs:
"一个或多个ResultSet对象"是什么意思?
execute
方法的javadoc是这样说的:
"执行给定的SQL语句,该语句可能返回多个结果。在某些(不常见的)情况下,单个SQL语句可能返回多个结果集和/或更新计数。通常你可以忽略这个,除非你(1)执行一个你知道可能会返回多个结果的存储过程,或者(2)你动态执行一个未知的SQL字符串。"
这很好地解释了它。有时一个查询可以传递多个ResultSet
。
如果是这样,如何有可能管理他们一旦得到ResultSet数组?
我不知道你是什么意思,但是:
- 你不能以数组的形式获取它们:你必须一次获取一个,
- 你可以把ResultSets放到一个数组中…
这不是(至少对我来说)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对象,该对象根据查询返回数据。