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

猜你喜欢

转载自blog.csdn.net/weixin_39452731/article/details/83036153