sql >> データベース >  >> RDS >> Sqlserver

Javaアプリケーションでsp_msforeachdbを実行します

    ステートメントがnoまたは複数を返すことができる場合 結果として、executeQueryは使用しないでください 、ただしexecute() 代わりに、このメソッドはbooleanを返します 最初の結果のタイプを示します:

    • true :結果はResultSet
    • false :結果は更新カウントです

    結果がtrueの場合 、次にgetResultSet()を使用します ResultSetを取得するには それ以外の場合は、getUpdateCount() 更新カウントを取得します。更新カウントが-1の場合 これ以上の結果がないことを意味します。更新回数も-1になることに注意してください 現在の結果がResultSetの場合 。 getResultSet()であることも知っておくとよいでしょう。 結果がこれ以上ない場合、または結果が更新カウントである場合は、nullを返す必要があります。

    さらに結果を取得したい場合は、getMoreResults()を呼び出します。 (またはその兄弟がintを受け入れる パラメータ)。 booleanの戻り値 execute()と同じ意味です 、したがってfalse これ以上結果がないという意味ではありません!

    getMoreResults()の場合、これ以上の結果はありません。 falseを返し、getUpdateCount() -1を返します (Javadocにも記載されています)

    基本的に、これは、すべての結果を正しく処理する場合は、次のようなことを行う必要があることを意味します。

    boolean result = stmt.execute(...);
    while(true)
        if (result) {
            ResultSet rs = stmt.getResultSet();
            // Do something with resultset ...
        } else {
            int updateCount = stmt.getUpdateCount();
            if (updateCount == -1) {
                // no more results
                break;
            }
            // Do something with update count ...
        }
        result = stmt.getMoreResults();
    }
    

    注:この回答の一部は、Java SQLに対する私の回答に基づいています:Statement.hasResultSet()?



    1. MySQLでピボットテーブルクエリを自動化する方法

    2. MicrosoftAccessのデザインビューでテーブルを開く方法

    3. MySQLiプリペアドステートメントエラーレポート

    4. SQLServerDBのすべてのインデックスとインデックス列のリスト