商品分类显示的错误(100分) 数据库连结被关闭了,你是不是还在别的地方使用了rs1 或者 rs2 ? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ResultSet rs1 = data.executeQuery(sql1);你的data已经被关闭了。试着查对应的demo.database代码。 ResultSet rs1 = data.executeQuery和ResultSet rs2 = data.executeQuery这两处都是使用的data,你分别定义,比如rs1的使用data1,rs2的使用data2,这样。还有就是,你这种嵌套的rs方式也容易产生问题。不推荐使用。可以改成多表查询的方式来解决。 ********连接数据库的bean************package demo;import java.io.PrintStream;import java.io.UnsupportedEncodingException;import java.sql.*;public class database{ private Connection conn; private Statement stmt; private ResultSet rs; private int resultNum; String CLASSFORNAME; String SERVANDDB; String USER; String PWD; public database() { conn = null; stmt = null; rs = null; resultNum = 0; CLASSFORNAME = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; SERVANDDB = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=***"; USER = "***"; PWD = "***"; try { try { Class.forName(CLASSFORNAME); } catch(ClassNotFoundException classnotfoundexception) { } conn = DriverManager.getConnection(SERVANDDB, USER, PWD); stmt = conn.createStatement(); } catch(SQLException sqlexception) { sqlexception.printStackTrace(); } } public Connection getConnection() { return conn; } public ResultSet executeQuery(String s) { rs = null; try { rs = stmt.executeQuery(s); } catch(SQLException sqlexception) { System.out.println("Query error:" + sqlexception.getMessage()); } return rs; } public int executeUpdate(String s) { resultNum = 0; try { resultNum = stmt.executeUpdate(s); } catch(Exception exception) { System.err.println("Update error:" + exception.getMessage()); } return resultNum; } public void close() { try { if(rs != null) { rs.close(); rs = null; } if(stmt != null) { stmt.close(); stmt = null; } if(conn != null) { conn.close(); conn = null; } } catch(SQLException sqlexception) { System.out.println("close error: " + sqlexception.getMessage()); } }}**********************************首页显示就那些代码~帮帮忙吧~T_T 错误原因是:你用了嵌套的查询。你的database类不支持嵌套的查询。因为你所有的查询公用一个Statement, Statement只能用于一个ResultSet,执行第2个查询时自动关闭了前一个ResultSet。ResultSet rs1 = data.executeQuery(sql1);while(rs1.next()){...ResultSet rs2 = data.executeQuery(sql2); // !!在这一步自动把rs1关闭了!!while(rs2.next()){...}rs2.close();}rs1.close(); to: jiafcat()多谢大哥指点~请问有什么办法可以解决吗? jiafcat() 和我说的一样嘛,嘿嘿 这么解决。stmt这个就是bean里面,在你用rs2的时候,先定义一下Statement stmt1 = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);这重新定义一个新的stmt1就可以了,当然要在rs2完成后stmt1.close(); 把Bean里的查询改一下 public ResultSet executeQuery(String s) { rs = null; try { Statement stmt1 = conn.createStatementResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); rs = stmt1.executeQuery(s); } catch(SQLException sqlexception) { System.out.println("Query error:" + sqlexception.getMessage()); } return rs; } to jiafcat() 不好意思大哥,俺给忘了,谢谢指点~也谢谢大家的参与~小弟这里先谢过了~ java mysql 中文乱码问题 求高手指教 请教servlet问题 在1024X768下正常,在高点的分辨率下添加删除按钮就改变位置了,找不到原因~~指导下 struts2登陆转到错误 我应该选择PHP,还是JSP? 如何从不同的数据源的两个表中查询出数据集,这两个表都有一个ID对应,将ID相等的记录查询出来,得到数据集. 高手指点,在jsp里datediff函数的应用问题,在线请教....... 在jsp里如何实现URL的重写 菜鸟请教一个jsp数据库简单问题 ajax 上传图片 帮我看下哪错了 为什么不可以显示统计数据的? 谁给我一段两个列表框之间通过多选、单选按钮增加或删除行的代码
还有就是,你这种嵌套的rs方式也容易产生问题。不推荐使用。可以改成多表查询的方式来解决。
package demo;import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.sql.*;public class database
{ private Connection conn;
private Statement stmt;
private ResultSet rs;
private int resultNum;
String CLASSFORNAME;
String SERVANDDB;
String USER;
String PWD; public database()
{
conn = null;
stmt = null;
rs = null;
resultNum = 0;
CLASSFORNAME = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
SERVANDDB = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=***";
USER = "***";
PWD = "***";
try
{
try
{
Class.forName(CLASSFORNAME);
}
catch(ClassNotFoundException classnotfoundexception) { }
conn = DriverManager.getConnection(SERVANDDB, USER, PWD);
stmt = conn.createStatement();
}
catch(SQLException sqlexception)
{
sqlexception.printStackTrace();
}
} public Connection getConnection()
{
return conn;
} public ResultSet executeQuery(String s)
{
rs = null;
try
{
rs = stmt.executeQuery(s);
}
catch(SQLException sqlexception)
{
System.out.println("Query error:" + sqlexception.getMessage());
}
return rs;
} public int executeUpdate(String s)
{
resultNum = 0;
try
{
resultNum = stmt.executeUpdate(s);
}
catch(Exception exception)
{
System.err.println("Update error:" + exception.getMessage());
}
return resultNum;
} public void close()
{
try
{
if(rs != null)
{
rs.close();
rs = null;
}
if(stmt != null)
{
stmt.close();
stmt = null;
}
if(conn != null)
{
conn.close();
conn = null;
}
}
catch(SQLException sqlexception)
{
System.out.println("close error: " + sqlexception.getMessage());
}
}
}
**********************************
首页显示就那些代码~帮帮忙吧~T_T
因为你所有的查询公用一个Statement, Statement只能用于一个ResultSet,执行第2个查询时自动关闭了前一个ResultSet。
ResultSet rs1 = data.executeQuery(sql1);
while(rs1.next()){
...
ResultSet rs2 = data.executeQuery(sql2); // !!在这一步自动把rs1关闭了!!
while(rs2.next()){
...
}
rs2.close();
}
rs1.close();
多谢大哥指点~请问有什么办法可以解决吗?
stmt这个就是bean里面,在你用rs2的时候,先定义一下Statement stmt1 = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);这重新定义一个新的stmt1就可以了,当然要在rs2完成后stmt1.close();
public ResultSet executeQuery(String s)
{
rs = null;
try
{
Statement stmt1 = conn.createStatementResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); rs = stmt1.executeQuery(s);
}
catch(SQLException sqlexception)
{
System.out.println("Query error:" + sqlexception.getMessage());
}
return rs;
}
不好意思大哥,俺给忘了,谢谢指点~也谢谢大家的参与~小弟这里先谢过了~