一次执行多个本机查询

时间:2011-07-18 14:24:49

标签: java mysql hibernate native

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

我的字符串包含多个这样的更新:

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

如果我手动执行statements的内容,我没有错误,所以我假设多个以分号分隔的查询在Hibernate或JDBC中的某处造成了麻烦。

分割statements字符串并为每一行单独执行createSQLQuery(statement).executeUpdate()是否更好?

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

你必须至少用单引号包含X和Y,我会说。

答案 2 :(得分:1)

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

另外:语法中的错误是您需要加上引号'Y''X'