0

mysqlに署名付きのプロシージャがあります

"coursePK bigint(20), groupName varchar(1000), userPK bigint(20), newClassPK bigint(20), assignmentFlag varchar(1), rosterFlag varchar(1), gradebookFlag varchar(1), isHavingMasterClass varchar(1), OUT newBookPK bigint(20)"

プロシージャの最後にはStart transactionandCommitステートメントがあります。コミット後、OUT パラメータの値を設定しています。

現在、私の Java コードはプロシージャを呼び出すために Callable ステートメントを使用しており、callableStatement.getString(index)orを使用して out パラメータを取得しているときcallableStatement.getInt(index)、常にそれぞれ null と 0 を取得しています。

しかし、mysql クエリ ブラウザからプロシージャを実行し、最後に行を追加するとSELECT newBookPK、正しい出力パラメータが得られます。

Javaコードからも正しい値を取得するのを手伝ってください。

JAVAから出力パラメータを取得する際に間違っているところ。

Java コードは次のとおりです。

callableStatement = conn.prepareCall("{call copy_custombook_details(?,?,?,?,?,?,?,?,?)}"); //coursePK bigint(20), groupName varchar(1000), userPK bigint(20), newClassPK bigint(20), assignmentFlag varchar(1), rosterFlag varchar(1), gradebookFlag varchar(1), isHavingMasterClass varchar(1), OUT newBookPK bigint(20)
count=1;
callableStatement.setString(count++, coursePK);
callableStatement.setString(count++, groupName);
callableStatement.setString(count++, userPK);
callableStatement.setString(count++, newClassPK);
callableStatement.setString(count++, "N");
callableStatement.setString(count++, "N");
callableStatement.setString(count++, "N");
callableStatement.setString(count++, isHavingMasterClass);
callableStatement.registerOutParameter(count++, Types.VARCHAR);
callableStatement.execute();
newBookPK = callableStatement.getString(9);
4

2 に答える 2

0

When I am executing the procedure from mysql query browser ...
そして、あなたの Java コードでは、ステートメントを実行するためにどこを呼び出していますか?

中間

callableStatement.registerOutParameter(count++, Types.VARCHAR);
newBookPK = callableStatement.getString(9);

含む

callableStatement.execute();

そして、getString( 9 )望ましいものを返す必要があります。

于 2012-05-18T11:11:50.237 に答える
0

この問題の原因は、mysql プロシージャの署名にあります。プロシージャに OUT パラメータがある場合、それらは IN パラメータの前に定義する必要があります

あなたの場合、プロシージャの署名は次のように変更する必要があります

OUT newBookPK bigint(20), coursePK bigint(20), groupName varchar(1000), userPK bigint(20), newClassPK bigint(20), assignmentFlag varchar(1), rosterFlag varchar(1), gradebookFlag varchar(1), isHavingMasterClass varchar(1)

Javaコードはその順序に従って変更する必要があります。

于 2013-12-11T12:57:52.220 に答える