1. 程式人生 > >java資料庫程式設計(7) 管理結果集

java資料庫程式設計(7) 管理結果集

  1. 在前面已經有接觸過封裝查詢結果集的類ResultSet了,可以通過next()方法移動指標來訪問結果集。
  2. ResultSet還有其他方法可以靈活地移動記錄指標,可以使用以下這些方法的ResultSet稱為可滾動的結果集,在java5之後,預設開啟的ResultSet是可滾動的。
    1. absolute(int row)移動到指定的行。
    2. previous()移動到上一行
    3. afterLast()移動到最後一行之後,它的previous()就是最後一行
  3. 預設開啟的ReusltSet是不可以更新查詢結果的,如果需要使得結果集有更新查詢結果的功能,則需要在建立Statement或者PreparedStatement的時候額外傳入引數。
  4. 具體的講解穿插在程式碼中。
    1. 在執行程式之前,表的內容是這樣的
      +------+-------+------+------+------+
      | 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