Statement对象重新执行将关闭当前ResultSet

如下代码,希望对ResultSet结果集每一项分别处理,在while中对statement进行操作,结果只能对结果集的第一项进行处理后while循环就退出了。

      /**/
      String query1= "select distinct nyr,yydm from dm_mpg_test";
      ResultSet re1=statement.executeQuery(query1);
       //get the number of the records
      re1.last();
      System.out.println( "ResultSet size:"+re1.getRow());
      re1.beforeFirst();
      String strNYR= null;
      String strYYDM= null;
       while(re1.next()){
        strNYR=(String)re1.getObject(1);
        strYYDM=(String)re1.getObject(2);
        /**/
         //create view: "v_strNYR_strYYDM"
        String view2= "create view v_"+strNYR+ "_"+strYYDM+ " as " +
         "select kh from dm_mpg_test " +
         "where nyr=  '" +strNYR+ "' and yydm='"+strYYDM+
         "' with read only ";
        statement.executeUpdate(view2);     
      }
原因引用 java statement对象描述:
“执行语句的所有方法(executeQuery、executeUpdate 和 execute)都将关闭所调用的 Statement 对象的当前打开结果集(如果存在)。这意味着在重新执行 Statement 对象之前,需要完成对当前 ResultSet 对象的处理。 ”

执行statement.executeUpdate(view2)时ResultSet关闭,所以无法处理ResultSet的每一项。个人解决办法生成新的Statement对象,鉴于使用了动态sql,将statement.executeUpdate(view2); 改成:

                PreparedStatement pst=con.prepareStatement(view2);
                pst.executeUpdate();

你可能感兴趣的:(职场,ResultSet,statement,休闲)