簡體   English   中英

在一個 go 中執行多個本機查詢

[英]Executing multiple native queries in one go

我想知道是否可以通過 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()方法。 這將按照您將 m 添加到批次的順序為您執行所有操作。

另外:你的語法錯誤是你需要用引號'Y''X'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM