gpt4 book ai didi

java - 如何使用 JDO 和 DataNucleus 在 MySQL 5.5 中设置变量?

转载 作者:行者123 更新时间:2023-11-30 00:24:51 24 4
gpt4 key购买 nike

作为审核日志记录过程的一部分,我需要在运行 INSERT INTO... 语句之前在代码中设置变量 @user_idINSERT 将启动使用 @user_idTRIGGER

我尝试了以下查询:

SET @user_id = 5

这不起作用,因为ResultSet不能为NULL(并且此查询不返回任何内容)

SELECT 51 INTO @user_id

这不起作用,因为 Java 中 ResultSet 不能为 NULL

SELECT @user_id := 51

这不起作用,因为在使用 PersistenceManagerQuery 对象运行查询时,: 字符被转换为参数标记。

那么,使用 DataNucleus,我如何设置变量,以便我的 TRIGGER 语句成功并获得审计所需的必要信息?

我运行查询的 Java 代码如下:

PersistenceManager pm = getPersistenceManager(); // My own function to get the PersistenceManager
Query q = pm.newQuery("javax.jdo.query.SQL", "QUERY HERE");
q.execute();

如果无法做到这一点,我可以尝试哪些其他选项来达到相同的结果?

编辑:我正在使用 Google App Engine,因此我无法使用存储过程。

最佳答案

我找不到解决上述问题的方法,因此使用了另一种方法,我将对此进行解释:

我创建了一个名为 transaction_properties 的表,它有两列:user_idconnection_id

在每个事务提交之前,我将用户的ID插入transaction_properties表中(我在这个阶段知道),和 MySQL 占位符 CONNECTION_ID(),它输出当前连接 ID。

在我的触发器中,我使用以下语句来查找此事务的 user_id:

DECLARE user_id bigint;

SELECT `userid` INTO user_id FROM `transaction_properties`
WHERE `transaction_id` = CONNECTION_ID() LIMIT 1;

IF user_id IS NULL THEN
SET user_id = -1;
END IF;

然后,我可以将 INSERT 中声明的变量 user_id 引用到触发器中其他位置的审核表。

关于java - 如何使用 JDO 和 DataNucleus 在 MySQL 5.5 中设置变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22968044/

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