gpt4 book ai didi

java - 检索触发器生成的主键 (Java)

转载 作者:行者123 更新时间:2023-11-29 21:41:41 25 4
gpt4 key购买 nike

这就是我正在尝试做的事情。我有一个 Java 程序,可以将遥测流分解为各个原始字段。我将这些原始字段值传递到 MySQL 表中,其中每一列都是字段之一。在这个数据库中,我还有一个 View ,可以获取所有遥测数据并根据原始数据(例如工程单位的原始计数)计算一些新的派生列。在我的 Java 程序中,插入后我想从 VIEW 中获取相应的行(原始 + 派生)并将该数据传递到其他地方。

最初我以为我可以简单地将原始数据插入到 VIEW 中,然后在 Java 程序的 ResultSet 中将行返回给我。不幸的是,数据没有以 ResultSet 的形式返回。

我现在尝试做的是将原始数据插入表中(这部分有效),获取主键,然后从 View 中查找行。我正在努力解决的部分是从插入中检索主键。我正在使用从 Connection 对象生成的PreparedStatement,并为其提供了Statement.RETURN_GENERATED_KEYS。但是,当我在调用executeUpdate() 后在语句上调用getGenerateKeys() 时,我的ResultSet 始终为空。我可以看到它在运行时将行插入表中...我做错了什么?

如果主键是通过触发器生成的,我是否无法以这种方式检索生成的主键?

更新:我尝试将 Statement.RETURN_GENERATED_KEYS 替换为具有主键列名称的字符串数组,但这似乎也不起作用。

很抱歉没有包含我的代码,但这样做对我来说很难。我试图尽我所能描述我正在做的事情。

最佳答案

我在另一篇文章中看到过这个。那声称有效。这是你的样子吗?

Statement stmt = db.prepareStatement(query,  Statement.RETURN_GENERATED_KEYS);
numero = stmt.executeUpdate();

ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()){
risultato=rs.getInt(1);
}

我已经使用过 SP,这是我所做的一个示例。我使用输入/输出参数将其恢复...

CREATE DEFINER=`scaha`@`localhost` PROCEDURE `updateprofile`(
IN in_idprofile INT(10),
IN in_usercode VARCHAR(50),
IN in_pwd VARCHAR(50),
IN in_nickname VARCHAR(50),
IN in_isactive tinyint,
IN in_updated timestamp,
OUT out_idprofile INT(10))
BEGIN

/* If the idprofile is < 1 then we insert a new record.. */
/* otherwise its an update */

if (in_idprofile < 1) then

insert into scaha.profile (usercode, pwd, nickname, isactive,updated) values (in_usercode,in_pwd,in_nickname,in_isactive,in_updated);
SET out_idprofile = LAST_INSERT_ID();

else
update scaha.profile set usercode = in_usercode, pwd = in_pwd, nickname = in_nickname, isactive = in_isactive, updated = in_updated
where idprofile = in_idprofile;
SET out_idprofile = in_idprofile;

end if;

END

关于java - 检索触发器生成的主键 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34442892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com