0

我正在尝试向 MySQL 提交一个 sql 事务,但我让自己通过了MySQLSyntaxErrorException.

我正在使用的代码是:

implicit connection => 
        SQL("""
            start transaction;
            insert into projects(id_user, name, description) values({idUser}, {name}, {description});
            set @last_id = last_insert_id();
            insert into assigned(id_user, id_project) values({idUser}, @last_id);
            commit;
        """)
    .on('idUser -> idUser,
        'name -> project.name,
        'description -> project.description
    ).execute()  

我得到的例外:

[MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'insert into projects(id_user, name, description) values(1, 'First inserted proje' at line 1]  

我开始认为我根本无法使用 Anorm 执行此类语句。

4

1 回答 1

2

您不能以这种方式使用事务。您必须了解 anorm 只是现有 jdbc 库的包装器。默认情况下,使用withConnectionSQL时:

DB.withConnection { conn => 
    SQL("...
}

您的查询使用PreparedStatement进行转换。意味着;字符导致错误。

因此,如果你想使用事务,你必须使用anorm 的机制

DB.withTransaction { conn =>
    SQL("...
}
于 2012-11-04T15:06:34.350 回答