Video dla lepszej ilustracji problemu:
https://www.youtube.com/watch?v=x_WpngvO8o0&feature=youtu.be
Kiedy wywołamy poniższą procedure w MYSQL zwróci ona out parameter 1 jeżeli wiersz został updatowany i 0 kiedy nie został.
W JDBC dostajemy zawsze 1.
Próbowałem różnych wersji JDBC.
Szukałem na necie i nie znalazłem odpowiedzi, stąd prośba o pomoc.
PROCEDURA
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);
Dzięki.