を返していないこの手順では、MySQLでは正常に動作し、適切な値を返しますが、JDBCを使用しているとき、私は私、このプロシージャを呼び出すとき、それは常にMySQLでは1のMySQLで動作しますが、JDBCで、常に同じ値に
を返します。行が更新されたときに1を、更新されないときに0を取得します。なぜその出来事
に関係なく、私がいない結果と異なるJDBCドライバを試してみた。1.それは常に返し何JDBCで
は、私はまた、ここでの説明を見つけることができませんでした。もちろん、同じ結果に対して異なるコードを使用することもできますが、誰でもその理由を説明できますか?
PROCEDURE
CREATE DEFINER=`root`@`localhost` PROCEDURE `UPDATE_PARTICIPANT`(
IN
p_id int(11),
p_first_name VARCHAR(45),
OUT
p_suceed INT(11)
)
BEGIN
UPDATE `appdb`.`participants`
SET `id`=p_id,
first_name = p_first_name
WHERE `id`= p_id;
SET p_suceed = ROW_COUNT();
END
JDBC
Connection conn = null;
try {
conn =
DriverManager.getConnection("jdbc:mysql://localhost/appdb?" +
"user=root&password=password&serverTimezone=UTC");
} catch (SQLException ex) {
}
int id = 3;
String firstName = "updatedName";
CallableStatement cStmt = conn.prepareCall("{CALL UPDATE_PARTICIPANT(?,?,?)}");
cStmt.setInt(1, id);
cStmt.setString(2, firstName);
cStmt.registerOutParameter(3,java.sql.Types.INTEGER);
cStmt.execute();
int outputValue = cStmt.getInt(3);
System.out.println(outputValue);
感謝。
EDIT:
私はより良いilustrate問題への短いビデオを作った:https://www.youtube.com/watch?v=x_WpngvO8o0&feature=youtu.be Guysはpropertly渡される理由を変数MySQLでに焦点を当ててください、私たちは、JDBCでそれを得ることはできません:)
EDIT2:UPDATE文については
、デフォルトで影響を受けた、行の値が実際に変更さ 行の 数です。 mysqldに接続するときにCLIENT_FOUND_ROWSフラグを mysql_real_connect()に指定した場合、影響を受けた行の値は です。つまり、WHERE句でマッチします。
これが原因で、デフォルトではJDBCドライバにこれがあります。
*無関係:* '' SET '' id = p_id WHERE 'id' = p_id''のポイントは何ですか? – Andreas
これはあなたが求めていないものであっても、あなたは単に 'executeUpdate()'を実行して、 '' UPDATE appdb.participants SET id =?、first_name =?WHERE id =?戻り値としての行数。 –
@Andreas更新された「参加者」のIDを更新するオプションを追加するだけです – 0001