作为审核日志记录过程的一部分,我需要在运行 INSERT INTO...
语句之前在代码中设置变量 @user_id
。 INSERT
将启动使用 @user_id
的 TRIGGER
。
我尝试了以下查询:
SET @user_id = 5
这不起作用,因为ResultSet
不能为NULL
(并且此查询不返回任何内容)
SELECT 51 INTO @user_id
这不起作用,因为 Java 中 ResultSet
不能为 NULL
SELECT @user_id := 51
这不起作用,因为在使用 PersistenceManager
和 Query
对象运行查询时,:
字符被转换为参数标记。
那么,使用 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_id
和 connection_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/