Out parameter działa poprawnie w MySQL ale nie w JDBC, zawsze zwraca tą samą wartość "1"

0

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.

0

int(11) - to chyba musisz coś pokastować, żeby był zwykły int. Albo jeszcze tego spróbować:

If the JDBC type expected to be returned to this output parameter is specific to this particular database, sqlType should be java.sql.Types.OTHER. The method getObject(int) retrieves the value.

1

Hej! Patrząc po objawach, przypuszczam że może chodzić o coś takiego:

For UPDATE statements, the affected-rows value by default is the number of rows actually changed. If you specify the CLIENT_FOUND_ROWS flag to mysql_real_connect() when connecting to mysqld, the affected-rows value is the number of rows “found”; that is, matched by the WHERE clause.

Sterownik dla JDBC domyślnie ma to włączone.

1 użytkowników online, w tym zalogowanych: 0, gości: 1