一次执行多个本机查询
我想知道是否可以在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()
?
另一种方法是使用CASE语句。 例如:
UPDATE Foo SET bar = CASE baz WHEN 1 THEN 'X' WHEN 2 THEN 'Y' END CASE WHERE baz in (1,2)
我要说,你必须至少用单引号包含X和Y.
您可以做的是使用批处理语句,基本上在执行查询之前调用addBatch(string query);
方法,然后当你的所有查询都在批处理中时,只需调用executeBatch()
方法。 这将按照您添加mto批次的顺序为您执行所有操作。
另外:你的语法错误是你需要加上引号'Y'
或'X'