[英]Execute multiple SQL statements (CRUD) with JDBC
我正在使用Java(JDBC)創建用於SQL語句執行的命令行實用程序。 腳本被定義為具有許多查詢的文本文件。 每個查詢都由查詢分隔符(“;”)分隔。 輸出路由到標准輸出。
SELECT * FROM table1;
UPDATE table1 SET field1='' WHERE field2='';
SELECT * FROM table1;
INSERT INTO table1 VALUES(...)
SELECT * FROM table1;
由於JDBC可以批量執行語句,因此僅當它們不返回ResultSet時,我需要另一種方法。
到目前為止,我將讀取包含查詢的腳本文件,使用分隔符對其進行拆分,然后分析每個查詢,無論是“ SELECT”查詢還是“ INSERT”,“ UPDATE”,“ DELETE”查詢。 之后,我將在自己的語句中執行每個查詢。 將返回內容的內容寫入stdout,並執行操縱數據庫的查詢。 而且,當然,我會保留文件中查詢的順序。
我的問題是:如果文件中的一個查詢錯誤,則無法回滾,因為每個查詢都是單獨執行的。 我該如何處理?
對於數據庫連接,只需調用connection.setAutoCommit(false)然后執行語句,並在完成時調用connection.commit()即可;如果遇到錯誤,則可以調用connection.rollback()。
這是用於將查詢添加到批處理的代碼。
Statement stmt = conn.createStatement();
conn.setAutoCommit(false);
String SQL = "INSERT INTO table1 VALUES(...)";
stmt.addBatch(SQL);
String SQL = "INSERT INTO Employees (id, first, last, age) " +
"VALUES(201,'Raj', 'Kumar', 35)";
stmt.addBatch(SQL);
String SQL = "UPDATE Employees SET age = 35 " +
"WHERE id = 100";
stmt.addBatch(SQL);
int[] count = stmt.executeBatch();
//明確提交語句以應用更改
conn.commit();
嘗試這個.....
此代碼可能對您有幫助。
String Query1 = "SELECT * FROM Tablename1";
stmt1 = con.createStatement();
ResultSet rs = stmt1.executeQuery(Query1);
rs.next();
int totalQuery1Count = rs.getInt("TOTAL_Item");
String Query2 = "SELECT * FROM Tablename2";
rs = stmt1.executeQuery(Query2);
rs.next();
int totalQuery2Count = rs.getInt("TOTAL_Item2");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.