0

SQL トランザクションを MySQL にコミットしようとしていますが、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 に答える