我在将java
+ mysql与jdbc一起使用时检索插入的行ID时遇到问题。司机。
public Diak create(Diak diak) throws Exception
{
Connection connection = DBConnection.getConnection();
String SQL = "{ CALL DiakCreate(?, ?) }";
PreparedStatement stmt = connection.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
stmt.setString(1, diak.Nev);
stmt.setInt(2, diak.Kreditek);
int affectedRows = stmt.executeUpdate();
//ellenorizzuk, hogy van e modositott record
if (affectedRows == 0)
{
throw new SQLException("Failure");
}
//kikeressuk a generalt ID-t
ResultSet generatedKeys = stmt.getGeneratedKeys();
if (generatedKeys.next())
{
diak.Id = generatedKeys.getInt(1);
}
else
{
throw new SQLException("Failure");
}
return diak;
}
我尝试了一些在互联网上找到的解决方案。 该记录已插入到表中,但已引发异常,并且没有为我的响应对象设置 Id。
检查是否为预准备语句导入了正确的库。它应该是java.sql.statement而不是jdbc,这是一个常见的错误。
如果正确,请检查 PreparedStatement 接口,了解如何在此上下文中使用 executeUpdate(String sql, int autoGenerated Keys(。希望这有帮助。
java:
public Diak create(Diak diak) throws Exception
{
Connection connection = DBConnection.getConnection();
String SQL = "{ CALL DiakCreate(?, ?, ?) }";
CallableStatement stmt = connection.prepareCall(SQL);
stmt.setInt(1, diak.Id);
stmt.setString(2, diak.Nev);
stmt.setInt(3, diak.Kreditek);
ResultSet resultSets = stmt.executeQuery();
if (resultSets.next())
{
diak.Id = resultSets.getInt(1);
}
return diak;
}
MySQL过程:
DELIMITER $$
CREATE OR REPLACE PROCEDURE DiakCreate(OUT paramId INT, IN paramName VARCHAR(255), IN paramKreditek INT)
BEGIN
INSERT INTO
Diak (Nev, Kreditek)
VALUES
(paramName, paramKreditek);
SELECT LAST_INSERT_ID() as paramId;
END$$
DELIMITER ;