java 获取插入的行 ID


我在将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 ;

相关内容

  • 没有找到相关文章

最新更新