此過程在MySQL工作正常,並返回正確的值,但使用JDBC時,它總是返回1Out參數工作在MySQL,但不是在JDBC,總是返回相同的值
在MySQL時,我調用這個過程我行更新時將得到1,否則爲0。
在JDBC不管它總是返回1
我已經試過沒有結果不同的JDBC驅動程序,我也沒有在這裏找到解釋爲什麼它的發生。當然,我們可以爲相同的結果使用不同的代碼,但任何人都可以解釋爲什麼它會發生?
程序
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);
感謝。
編輯:
我做了一個簡短的視頻,以更好地ilustrate問題:https://www.youtube.com/watch?v=x_WpngvO8o0&feature=youtu.be 夥計們請關注爲什麼變量MySQL是propertly過去了,但我們不能在JDBC :)
得到它EDIT2:
對於UPDATE語句,默認情況下,受影響的行值是 數 行實際改變。如果在連接到mysqld時指定CLIENT_FOUND_ROWS標誌爲 mysql_real_connect(),受影響的行值爲 「found」行數;即通過WHERE子句進行匹配。
這可能是原因,默認情況下,JDBC驅動程序具有此功能。
*無關:* SET' id' = p_id WHERE'id' = p_id''的要點是什麼? – Andreas
即使這不是你所問的:你可以用''UPDATE appdb.participants SET id =?,first_name =?WHERE id =?「'準備語句來執行'executeUpdate()行計數作爲返回值。 –
@Andreas它只是增加了更新更新「參與者」的ID的選項 – 0001