0

次のように、sybase データベースを使用する Java コードにストアド プロシージャ コールがあります。

CallableStatement cstmt=sigmaConnection.prepareCall("{call dbo.sp_insRadEntry(?, ?, ?, ?, ?, ?, ?)}");
cstmt.setString(1,"Nappa");
cstmt.setInt(2,40);
cstmt.setString(3,"Vegeta");
cstmt.setString(4,"Saiyan");
cstmt.setString(7,"Hello"); 

cstmt.execute();

ご覧のとおり、5 番目と 6 番目のパラメーターを意図的に設定していません。ストアド プロシージャには値が渡されない場合にデフォルト値が提供されており、この呼び出しでは dbo.sp_insRadEntry(?, ?, ?, ?, ?, ?, ? )ここに7つのコンマがないと7番目のパラメーターを設定できなかったため、7つのパラメーターがあります。

しかし、4番目のパラメーターを設定したにもかかわらず、次の例外が発生します。

「java.sql.SQLException: JZ0SA: 準備済みステートメント: 入力パラメーターが設定されていません。インデックス: 4。」

4

4 に答える 4

0

'index 4'は5番目のパラメーター(インデックスはゼロベース)を参照しているように見えるので、問題はデフォルトのパラメーターがコードで認識されていないことだと思います。

于 2012-10-10T13:17:33.610 に答える
0

インデックス5と6にも値を設定する必要があります

int type = TYPE
pst.setNull(index, type);

TYPEについては、ここを参照してください: http ://www.tutorialspoint.com/jdbc/jdbc-data-types.htm

編集: Not Null制約がある場合は、データの読み取り中に無視する位置にダミー値または空白値を設定する以外に方法はありません(ええと、そのチェックのために追加のコードを記述する必要があります)。それをやりたいのなら、なぜ最初にNotNull制約を設定したのでしょうか。:-)

于 2012-10-10T13:27:00.160 に答える
0

これがあなたの DB で機能するかどうかはわかりませんが、指定したくないパラメーターの疑問符を省略するのはどうですか? あれは:

CallableStatement cstmt=sigmaConnection.prepareCall(
        "{call dbo.sp_insRadEntry(?, ?, ?, ?, , , ?)}");
cstmt.setString(1,"Nappa");
cstmt.setInt(2,40);
cstmt.setString(3,"Vegeta");
cstmt.setString(4,"Saiyan");
cstmt.setString(5,"Hello"); 

cstmt.execute();
于 2012-10-11T14:22:06.043 に答える
0

setNull メソッドを使用して、欠落している 5 番目と 6 番目のパラメーターも設定してみてください。

于 2012-10-10T13:20:44.997 に答える