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

标签 java mysql sql jdo datanucleus

作为审核日志记录过程的一部分,我需要在运行 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/

相关文章:

java - Spring Boot JPA,存储库不删除记录

java - 如何动态启用或禁用 Java Swing 程序的任务栏图标

java - 引用Android库的资源

php - mysql 查询(如)和 php 的问题

c++ - 将货币金额四舍五入到最接近的五分之一、四分之一、1 美元、5 美元等面额的最佳方法是什么?

java - 如何使用 Hibernate 设置默认实体属性值

php - 从 DATETIME 格式中提取小时值

php - 将表单中的数据插入表不起作用,不返回错误

sql - 根据外连接选择不同的列

sql - 记录 SSIS 变量表达式