web-dev-qa-db-ja.com

Statement.execute(sql)vs executeUpdate(sql)およびexecuteQuery(sql)

このメソッドに関連する質問があります:st.execute(sql);ここで、stは明らかにStatementオブジェクトです。 this Oracleから直接Javaチュートリアル:

execute:クエリが返す最初のオブジェクトがResultSetオブジェクトである場合、trueを返します。クエリが1つ以上のResultSetオブジェクトを返す可能性がある場合、このメソッドを使用します。 Statement.getResutSetを繰り返し呼び出して、クエリから返されたResultSetオブジェクトを取得します。

1つ以上のResultSetオブジェクト」とはどういう意味ですか? ResultSetの配列を取得したら、どのように管理できますか?一方、st.executeQuery(sql)st.executeUpdate(sql)は非常に明確です。それは(少なくとも私には)テーブルを更新したかのようにintを返すことができるst.execute(sql)の目的ではありません。

前もって感謝します

28
Rollerball

「1つ以上のResultSetオブジェクト」とはどういう意味ですか?

executeメソッドのjavadocには次のように書かれています。

"複数の結果を返す可能性がある特定のSQLステートメントを実行します。一部の(珍しい)状況では、単一のSQLステートメントが複数の結果セットや更新カウントを返す場合があります。通常、(1)既知のストアドプロシージャを実行すると、複数の結果が返されるか、(2)不明なSQL文字列を動的に実行しています。 "

それはほとんどそれを説明しています。クエリが複数のResultSetを配信できる場合があります。

もしそうなら、一度ResultSetの配列を取得してそれらを管理する方法はありますか?

どういう意味かわかりませんが:

  • 配列として取得することはできません。一度に1つずつ取得する必要があります。
  • resultSetを配列に入れることができます...

(少なくとも私には)st.execute(sql)の目的ではなく、テーブルを更新したかのようにintを返すこともできます。

executeの用途の1つは、クエリ、更新(何らかの種類)、または潜在的に複数の結果セットを提供する何かであるかどうかわからない場合にSQLステートメントを実行することです。 executeQuery()executeUpdate()の一般化です...

12
Stephen C

boolean execute():このPrepared Statementオブジェクト内のSQL文を実行します。SQL文はどのような種類でもかまいません。

ResultSet executeQuery():このPrepared Statementオブジェクト内のSQLクエリを実行し、クエリによって生成されたResultSetオブジェクトを返します。

int executeUpdate():このPrepared Statementオブジェクト内のSQLステートメントを実行します。SQLステートメントは、SQL INSERT、UPDATE、またはDELETEステートメントである必要があります。または、DDLステートメントなど、何も返さないSQLステートメント。

このような質問に対する答えを見つけるのに最適な場所は、Javadocsです。 Here

10
Kaveh Safavi