2014-02-05 56 views
0

我繞過障礙。以下語句不執行,因爲String query包含多個語句。如何執行多個語句的查詢爲一個?

String query="create volatile table test1 as (etc .); select TOP 10 * from test1; "; 

     String driver = "com.xxx"; 
     String conUrl="jdbc:ccc"; 
     Class.forName(driver); 
     Connection conn = DriverManager.getConnection(conUrl,user,password); 

     PreparedStatement stmt=conn.prepareStatement(query); 

最後一行拋出一個錯誤Data definition not valid unless solitary

這是非常麻煩我的查詢拆分成多個PreparedStatements

是否有執行包含多個語句作爲一個查詢任何其他方式?

+0

哪些錯誤與獨立執行的呢? – David

+0

如果用戶輸入查詢'create ... where x ='good; 「還有......」;選擇...。'我怎麼能確定的是,第一個查詢不字之後結束'good'我需要編寫額外的複雜的正則表達式 –

+0

你可以試試'conn.createStatement()。對於試圖執行(SQL)'這有時會接受多個語句。但在一般情況下,如果使用JDBC,你需要知道在哪裏語句開始和結束。 – vanOekel

回答

2

你可以使用JDBC批處理(addBatch,則ExecuteBatch),它可以讓你「堆棧」的語句,並將它們全部發送到數據庫引擎立即執行。

這裏起點:http://viralpatel.net/blogs/batch-insert-in-java-jdbc/

但你仍然需要其分割成單獨的報表,並將其添加一次一個。 Java: splitting a comma-separated string but ignoring commas in quotes

而且,正如@CHEBURASHKA指出的那樣,它只返回每條語句所影響的行數 - 如果您想要從表中請求實際數據,那麼這種行爲是不好的。

+0

+1。然而,這是不正確的。看看這個答案HTTP ://stackoverflow.com/questions/21118698/retrieve-resultset-using-callablestatement-after-executebatch – CHEBURASHKA

+0

你是對的,這取決於什麼是您正在執行的SQL,如果有結果,你需要看到我。」我會把它放在答案中。 – Turophile

相關問題