2016-12-21 42 views
3

是否有可能爲幾個語句使用PreparedStatementPreparedStatement for several statements

例如,我的意思是,如果 String sql = "INSERT INTO OR INGNORE ... ; UPDATE ... ; INSERT INTO ...";

PreparedStatement pre = conn.prepareStatement(sql); 
//... 
pre.executeUpdate(); 

只執行第一條語句"INSERT INTO OR INGNORE ...(直到分號)。 是否可以一次全部執行?

+0

你正在尋找的是批次。你在批處理中插入所有語句,然後執行批處理 – XtremeBaumer

+0

還有mysql特定的解決方案:http://stackoverflow.com/questions/10797794/multiple-queries-executed-in-java-in-single-statement – Vladimir

回答

1
String[] query = { "insert into Gericht (classification,date,name,preisExtern,preisIntern) values (?,?,?,?,?)", 
      "test" }; 
    PreparedStatement stmt; 
    for (String str : query) { 
     stmt = c.prepareStatement(str); 
     stmt.addBatch(); 
    } 
    stmt.executeBatch(); 

這裏是一個關於如何使用批處理的例子。如果它不是你想要的,請告訴我。

的希望:

@XtremeBaumer怎麼樣當準備好的聲明中變化的參數?你怎麼能動態地改變它?

答:

你不能。如果您想同時執行多個不同的查詢,則只能使用固定語句,否則代碼將非常大,然後可以通過設置參數並將其添加到批處理中手動執行。批次是好的,如果你有1個查詢得到不同的參數,你要添加一下子

+0

你想顯示我如何多次執行相同的陳述。是? – Vyacheslav

+0

現在看看。難以猜測如何使用幾種語句? – XtremeBaumer

+0

@XtremeBaumer準備語句中的參數何時更改?你怎麼能動態地改變它? – msagala25

3

是否有可能在一次執行呢?

這可能取決於數據庫供應商對JDBC驅動程序的實現,但總的來說,我不希望這樣做。

+0

爲什麼它應該依賴於JDBC?你在哪裏找到它的? – Vyacheslav

+0

[API](https://docs.oracle。com/javase/7/docs/api/java/sql/PreparedStatement.html)並未指定此行爲,因此JDBC實施者可以自由地執行任何她能想到的事情。 –

+0

這是什麼批處理是 – XtremeBaumer