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

2022-09-01 04:38:39

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

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

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

提前致谢


答案 1

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

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

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

找到此类问题的答案的最佳位置是Javadocs: 这里


答案 2

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

该方法的javadoc是这样说的:execute

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

这几乎可以解释它。有时,一个查询可以传递多个 .ResultSet

如果是这样,一旦获得一个结果集数组,如何管理它们?

我不确定你是什么意思,但是:

  • 你不能把它们作为数组来获取:你必须一次获取一个,并且
  • 你可以把结果集放到一个数组中...

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

的一个用途是执行SQL语句,如果你不知道它是否是一个查询,一个更新(某种)...或其他可能提供多个结果集的内容。它是和...executeexecuteQuery()executeUpdate()


推荐