java資料庫程式設計(7) 管理結果集
阿新 • • 發佈:2018-12-02
- 在前面已經有接觸過封裝查詢結果集的類ResultSet了,可以通過next()方法移動指標來訪問結果集。
- ResultSet還有其他方法可以靈活地移動記錄指標,可以使用以下這些方法的ResultSet稱為可滾動的結果集,在java5之後,預設開啟的ResultSet是可滾動的。
- absolute(int row)移動到指定的行。
- previous()移動到上一行
- afterLast()移動到最後一行之後,它的previous()就是最後一行
- 預設開啟的ReusltSet是不可以更新查詢結果的,如果需要使得結果集有更新查詢結果的功能,則需要在建立Statement或者PreparedStatement的時候額外傳入引數。
- 具體的講解穿插在程式碼中。
- 在執行程式之前,表的內容是這樣的
+------+-------+------+------+------+ | Sno | Sname | Ssex | Sage | Dno | +------+-------+------+------+------+ | Sno1 | Smith | m | 21 | D01 | | Sno2 | Marry | f | 21 | D01 | | Sno3 | Tom | m | 21 | D01 | +------+-------+------+------+------+
執行程式之後,它是這樣的
+-----+-------+------+------+------+ | Sno | Sname | Ssex | Sage | Dno | +-----+-------+------+------+------+ | S1 | Smith | m | 21 | D01 | | S2 | Marry | f | 21 | D01 | | S3 | Tom | m | 21 | D01 | +-----+-------+------+------+------+
import java.io.FileInputStream; import java.sql.*; import java.util.Properties; public class ResultSetTest { // 常規操作,不解釋 private String driver; private String url; private String user; private String pass; public void initParam(String paramFile) throws Exception{ Properties properties = new Properties(); properties.load(new FileInputStream(paramFile)); driver = properties.getProperty("driver"); url = properties.getProperty("url"); user = properties.getProperty("user"); pass = properties.getProperty("pass"); } public void query(String sql)throws Exception{ Class.forName(driver); try( Connection connection = DriverManager.getConnection(url, user, pass); PreparedStatement preparedStatement = connection.prepareStatement( sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); // 當需要結果集可更新表的內容的時候,就需要在這裡傳入相應的引數 // ResultSet.TYPE_SCROLL_INSENSITIVE:指標可以自由移動 // ResultSet.CONCUR_UPDATABLE:可以更新表的內容 ResultSet rs = preparedStatement.executeQuery()) { rs.last(); // 將指標移動到最後一行 int rowCount = rs.getRow(); // 得到行數 for(int i=rowCount; i>0; i--){ // 將指標在最後一行往前挪 rs.absolute(i); // 將指標在最後一行往前挪 System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3) + "\t" + rs.getInt(4) + "\t" + rs.getString(5)); // 打印出對應列的資訊 rs.updateString(1, "S" + i); // 更新第幾列 rs.updateRow(); // 執行更新 } } } public static void main(String args[]) throws Exception{ ResultSetTest rt = new ResultSetTest(); rt.initParam("mysql.ini"); rt.query("select * from students;"); } } //執行程式,看到以下輸出 // S3 Tom m 21 D01 // S2 Marry f 21 D01 // S1 Smith m 21 D01
- 在執行程式之前,表的內容是這樣的