如下代码,希望对ResultSet结果集每一项分别处理,在while中对statement进行操作,结果只能对结果集的第一项进行处理后while循环就退出了。
原因引用
java statement对象描述:
“执行语句的所有方法(executeQuery、executeUpdate 和 execute)都将关闭所调用的 Statement 对象的当前打开结果集(如果存在)。这意味着在重新执行 Statement 对象之前,需要完成对当前 ResultSet 对象的处理。 ”
执行statement.executeUpdate(view2)时ResultSet关闭,所以无法处理ResultSet的每一项。个人解决办法生成新的Statement对象,鉴于使用了动态sql,将statement.executeUpdate(view2); 改成:
/**/
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);
}
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);
}
“执行语句的所有方法(executeQuery、executeUpdate 和 execute)都将关闭所调用的 Statement 对象的当前打开结果集(如果存在)。这意味着在重新执行 Statement 对象之前,需要完成对当前 ResultSet 对象的处理。 ”
执行statement.executeUpdate(view2)时ResultSet关闭,所以无法处理ResultSet的每一项。个人解决办法生成新的Statement对象,鉴于使用了动态sql,将statement.executeUpdate(view2); 改成:
PreparedStatement pst=con.prepareStatement(view2);
pst.executeUpdate();
pst.executeUpdate();
转载于:https://blog.51cto.com/dongdong1314/203970