一次执行多个本机查询

2022-09-03 15:44:51

我想知道是否可以在Hibernate(3.2)中使用一次调用来执行几个分号分隔的SQL更新查询。SQLQuery#executeUpdate()

我有包含多个更新的字符串,如下所示:

String statements = "UPDATE Foo SET bar=1*30.00 WHERE baz=1; 
                     UPDATE Foo SET bar=2*45.50 WHERE baz=2;...";

我正在尝试做

 Query query = session.createSQLQuery(statements);
 query.executeUpdate();

但不断得到以下错误

com.mysql.jdbc.exceptions.jdbc4.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 
'UPDATE Foo SET bar=Y WHERE ' at line 3

如果我手动执行的内容,我不会得到任何错误,所以我假设多个分号分隔的查询在Hibernate或JDBC的某个地方引起了麻烦。statements

是否最好只拆分字符串并为每行单独执行操作?statementscreateSQLQuery(statement).executeUpdate()


答案 1

另一种方法是使用 CASE 语句。例如:

UPDATE Foo
    SET bar = 
    CASE baz
       WHEN 1 THEN 'X'
       WHEN 2 THEN 'Y'
    END CASE
WHERE baz in (1,2)

答案 2

您可以做的是使用批处理语句,基本上在执行查询之前调用方法,然后当所有查询都在批处理中时,只需调用该方法。这将按照您添加到批处理中 m 的顺序为您执行所有这些操作。addBatch(string query);executeBatch()

另外:语法中的错误是您需要放在引号中或'Y''X'


推荐