0

私は、与えられた入力 (血液型、名前、ID 番号など、ほぼ 26 の入力を取るバイオデータ) に基づいて人を検索する手順を保存しました。

Callable Statement preparecallメソッドを使用して Java からストアド プロシージャ (SQL サーバー) を実行しています。以前は、多くの入力パラメーターの 1 つに文字列入力が渡されるたびに、ストアド プロシージャが結果 (0 行の結果) を返さないという問題がありました。一方、整数型のパラメータ値が渡された場合は正しい結果が得られましたが、ドライバーをjdbcドライバーからjdbc:odbcドライバーに変更するとsqlserverdriver name=com.microsoft.sqlserver.jdbc.SQLServerDrive)、問題は解決しました。

ここで、私の新しい問題は、16 個の入力を受け取る私のプロシージャーが実行されているときに、ドライバーの同じ変数(変更されたもの) でprocSearch2完全に問題なく結果が得られるが、27 個の入力を持つ他のプロシージャー ( ) が結果を返さないことです。または入力値が渡されても。ConnectionjdbcprocSearch1intstring

エラーは発生しません。3行の結果が返されるはずの0行の結果が返されるだけです。

ここにコードがあります

 CallableStatement stmt=connect.prepareCall("{CALL  procSearch1(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
 stmt.setInt(1,0);
 stmt.setString(2,"");
 stmt.setString(3,"");
 .
 .
 .
stmt.setInt(27,0);
 ResultSet result=stmt.executeQuery();

 if(result!=null)
{
   System.out.println(result.getRow()); 
  while(result.next)
  {
    System.out.println(result.getString("Name"));

   }

 }
4

1 に答える 1

0

sp の戻り値を読み取るには、出力パラメータを CallableStatement に設定する必要があります。このようなもの(簡潔にするために例外処理は省略されています):

CallableStatement  stmt = connection.prepareCall("{? = call procSearch1(?,?,?) }");
stmt.registerOutParameter(1, java.sql.Types.INTEGER);
stmt.setString(2, "abc");
stmt.setString(3, "xyz");
stmt.execute();
Integer sp_return_value = stmt.getInt(1);

編集:あなたのコメントに基づいて、SPがSelectの結果、つまりresultSetを返す場合、executeQuery()の代わりにstatement.execute()を使用する必要があると思います。

http://msdn.microsoft.com/en-us/library/ms378630.aspxおよびhttp://msdn.microsoft.com/en-us/library/ms378487.aspxを参照してください。

したがって、コードは次のようになります。

CallableStatement stmt=connect.prepareCall("{CALL  procSearch1(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
stmt.setInt(1,0);
stmt.setString(2,"");
stmt.setString(3,"");
.
.
.
stmt.setInt(27,0);
ResultSet result = stmt.execute();

if(result!=null) {
    System.out.println(result.getRow()); 
    while(result.next) {
        System.out.println(result.getString("Name"));
    }
}
于 2012-09-02T16:03:21.407 に答える