ClassB中被调用方法: public ResultSet GetResultSet(String SqlStatement, int startpos, int recordnumber) throws SQLException { String tempsql = SqlStatement; ResultSet resultset = null; Connection conn = null; PreparedStatement pstmt = null; try { //tempsql = String.valueOf(tempsql) + String.valueOf(String.valueOf(String.valueOf((new StringBuffer(" limit ")).append(startpos).append(",").append(recordnumber)))); // tempsql = "SELECT * from (select zcsrq,zczhkszd,zhyzk," + // "zljsy,zsfzh,rownum num from MZ_WLRKGL where rownum <=8) where num >= 1"; tempsql = "SELECT * from ( " + SqlStatement + " and rownum<=" + (recordnumber+startpos)+ " ) where num >= " + startpos ; System.out.println("tempsql::::"+tempsql); conn = ResourceManager.getConnection(); pstmt = conn.prepareStatement(tempsql); resultset = pstmt.executeQuery(); //System.out.println("11:"+resultset.getString("column_desc")); return resultset; } catch (Exception e) { e.printStackTrace(); } finally { pstmt.close(); resultset.close(); if(conn!=null){ conn.close(); } } return null; }
部分报错信息:<2006-10-12 下午02时56分58秒 CST> <Error> <HTTP> <BEA-101017> <[ServletContext(i d=42165252,name=DefaultWebApp,context-path=)] Root cause of ServletException. javax.servlet.jsp.JspException: TableTag - Result set already closed
int recordnumber) throws SQLException {
String tempsql = SqlStatement;
ResultSet resultset = null;
Connection conn = null;
PreparedStatement pstmt = null;
try { //tempsql = String.valueOf(tempsql) + String.valueOf(String.valueOf(String.valueOf((new StringBuffer(" limit ")).append(startpos).append(",").append(recordnumber))));
// tempsql = "SELECT * from (select zcsrq,zczhkszd,zhyzk," +
// "zljsy,zsfzh,rownum num from MZ_WLRKGL where rownum <=8) where num >= 1"; tempsql = "SELECT * from ( " + SqlStatement + " and rownum<=" + (recordnumber+startpos)+ " ) where num >= " + startpos ;
System.out.println("tempsql::::"+tempsql);
conn = ResourceManager.getConnection();
pstmt = conn.prepareStatement(tempsql);
resultset = pstmt.executeQuery();
//System.out.println("11:"+resultset.getString("column_desc"));
return resultset;
}
catch (Exception e) {
e.printStackTrace();
}
finally {
pstmt.close();
resultset.close();
if(conn!=null){
conn.close();
}
}
return null;
}
d=42165252,name=DefaultWebApp,context-path=)] Root cause of ServletException.
javax.servlet.jsp.JspException: TableTag - Result set already closed
这个问题是很麻烦, 不关connection吧, 又怕connection一直不关。建议转换成ArrayList...(.net里返回DataTable,关闭connection都没关系,java应该也这样)
他会帮你建立一个cache 即使Connection关闭
数据也会被保留。