weiß nicht, warum, aber ich bin halten 0 als Ausgabeparameter immer ... Ich lief wie folgt vor:MySQL Prozedur hält den Wert 0 zurück
INSERT INTO users (first_name, last_name, email, image, date_of_registration)
VALUES ("xx", "xx", "xxx", null, sysdate());SELECT LAST_INSERT_ID();
und ich bekam gutes Ergebnis (! = 0) als ich annehme, dass PersistentConnections
auf true
gesetzt ist. irgendwelche anderen Konfigurationen, die das verursachen könnten?
Verfahren
DROP PROCEDURE IF EXISTS partners.create_user;
CREATE DEFINER=`partnersmaster`@`%` PROCEDURE `create_user`(
IN p_first_name NVARCHAR(30),
IN p_last_name NVARCHAR(30),
IN p_email NVARCHAR(100),
IN p_image NVARCHAR(200),
IN p_date_of_registration TIMESTAMP,
OUT p_user_id INT
)
BEGIN
INSERT INTO users (first_name, last_name, email, image, date_of_registration)
VALUES (p_first_name, p_last_name, p_email, p_image, p_date_of_registration);
SET @p_user_id = LAST_INSERT_ID();
END;
Java
conn = engine.getDal().getConnection();
st = conn.prepareCall("{call partners.create_user(?,?,?,?,?,?)}");
st.setString("p_first_name", user.getFirstName());
st.setString("p_last_name", user.getLastName());
st.setString("p_email", user.getEmail());
if(user.getImage() != null)
st.setString("p_image", user.getImage());
else
st.setNull("p_image", Types.NVARCHAR);
st.setTimestamp("p_date_of_registration", new Timestamp(System.currentTimeMillis()));
st.registerOutParameter("p_user_id", Types.INTEGER);
st.execute();
userId = st.getInt("p_user_id");
Wenn Sie das Verfahren nativ aufrufen, erhalten Sie das erwartete Ergebnis, auch? Und wenn Sie die Einfügung innerhalb von Java ausführen und last_insert_id() auswählen, erhalten Sie dann auch das erwartete Ergebnis? – slowy
guter Punkt ... Überprüfung –