簡體   English   中英

使用JDBC執行多個SQL語句(CRUD)

[英]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.

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