请问javabean使用问题,我不知道错在那里?帮我!!!

时间:2021-06-15 19:05:57
我的javabean文件:
// Java Document
package beans;

import java.io.*;
//import javax.servlet.http.*; 
import java.sql.*;

public class scgraduate //implements HttpSessionBindingListener
{
private Connection con = null; //与资料库连结有关的Bean属性
private Statement stmt =null;
private ResultSet rs = null;

public scgraduate()  //在建构子中完成资料库连结
{
BulidConnection(); //建立资料库连结
}

private void BulidConnection() //建立资料库连结的方法
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //载入驱动程式类别

con = DriverManager.getConnection("jdbc:odbc:scdb","sa","bbc"); //建立资料库连线
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
     ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}

public void close()
{
try{
    //rs.close();
//rs = null;
    stmt.close();
stmt = null;
con.close(); //关闭Connection物件
con =  null;
}
catch(SQLException sex)
{
System.out.println(sex.toString());
}
}
public ResultSet getcondition(String scusername)//获得学生的毕业条件
{
    if(con == null)  //若con为null时, 重新建立资料库连结
   {
       BulidConnection();
   }
String ExeSQL="select mustpoint,basechoosepoint,specialtychoosepoint from condition,student where condition.specialty=student.specialty AND student.SNo='"+scusername+"'";
try{
        rs = stmt.executeQuery(ExeSQL);
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
return this.rs;
}
public ResultSet getmustpoint(String scusername)//获得学生的必修课学分
{
    if(con == null)  //若con为null时, 重新建立资料库连结
   {
       BulidConnection();
   }
String ExeSQL="select sum(Scount) must_p from allot,student,course,sel,ct where student.SNo=sel.SNo AND course.CNo=allot.CNo AND allot.ANo=sel.ANo AND course.TNO=ct.TNo AND sel.grade>=60 AND ct.TNo in (1,2,3) AND student.SNo='"+scusername+"'";
try{
        rs = stmt.executeQuery(ExeSQL);
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
return this.rs;
}
public ResultSet getbasechoosepoint(String scusername)//获得学生的基础选修课学分
{
    if(con == null)  //若con为null时, 重新建立资料库连结
   {
       BulidConnection();
   }
String ExeSQL="select sum(Scount) basechoose_p from allot,student,course,sel,ct where student.SNo=sel.SNo AND course.CNo=allot.CNo AND allot.ANo=sel.ANo AND course.TNO=ct.TNo AND sel.grade>=60 AND ct.TNo=4 AND student.SNo='"+scusername+"'";
try{
        rs = stmt.executeQuery(ExeSQL);
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
return this.rs;
}
public ResultSet getspecialtychoosepoint(String scusername)//获得学生的专业基础选修课学分
{
    if(con == null)  //若con为null时, 重新建立资料库连结
   {
       BulidConnection();
   }
String ExeSQL="select sum(Scount) specialtychoose_p from allot,student,course,sel,ct where student.SNo=sel.SNo AND course.CNo=allot.CNo AND allot.ANo=sel.ANo AND course.TNO=ct.TNo AND sel.grade>=60 AND ct.TNo=5 AND student.SNo='"+scusername+"'";
try{
        rs = stmt.executeQuery(ExeSQL);
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
return this.rs;
}

}



我的调用文件:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<html>
<head>
<title>毕业情况查询</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<CENTER>
<jsp:useBean id="graduate" scope="session" class="beans.scgraduate"/>
  <p>
    <% String username=(String)session.getAttribute("scusername");%>
    <% float mustpoint=0,basechoosepoint=0,specialtychoosepoint=0,must_p=0,basechoose_p=0,specialtychoose_p=0;%>
    <% ResultSet rs = graduate.getcondition(username);
   if (rs.next())
      {
       mustpoint=(float)rs.getFloat("mustpoint");
   basechoosepoint=(float)rs.getFloat("basechoosepoint");
   specialtychoosepoint=(float)rs.getFloat("specialtychoosepoint");
  }
%>
 <% ResultSet rs1 = graduate.getmustpoint(username);
 if  (rs1.next())
     {    must_p=(float)rs1.getFloat("must_p"); 
 }
 %>
 <% ResultSet rs2 = graduate.getbasechoosepoint(username);
 if  (rs1.next())
     {    basechoose_p=(float)rs2.getFloat("basechoose_p"); 
 }
 %>
  <% ResultSet rs3 = graduate.getspecialtychoosepoint(username);
 if  (rs1.next())
     {    specialtychoose_p=(float)rs3.getFloat("specialtychoose_p"); 
 }
 %>
  </p>
  <p>你的毕业条件如下:</p>
  <hr>
  <p>最低必修课学分:<%=mustpoint%>最低基础选修课学分:<%=basechoosepoint%>最低专业选修课学分:<%=specialtychoosepoint%></p>
  <p>目前你的必修课学分为:<%=must_p%>基础选修课学分为:<%=basechoose_p%>专业选修课学分为:<%=specialtychoose_p%></p>
  </CENTER>
</body>
</html>


出错情况:
Apache Tomcat/4.0.3 - HTTP Status 500 - Internal Server Error

--------------------------------------------------------------------------------

type Exception report

message Internal Server Error

description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: ResultSet is closed
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:463)

root cause 

java.sql.SQLException: ResultSet is closed
at sun.jdbc.odbc.JdbcOdbcResultSet.checkOpen(JdbcOdbcResultSet.java:6356)

8 个解决方案

#1


if(con == null)  //若con为null时, 重新建立资料库连结
{
       BulidConnection();
}

改为
if(con == null || con.isClosed())  //若con为null时, 重新建立资料库连结
{
       BulidConnection();
}

#2


littlecpu,你好!
    我照你的用法做了,可还是出错!这又是什么问题?

scgraduate.java:106: unreported exception java.sql.SQLException; must be caught
or declared to be thrown
            if(con.isClosed() || con == null )  //若con为null时, 重新建立资料库
连结
                  ^
1 error

谢谢!

#3


if(con.isClosed() || con == null ) 
if(con == null || con.isClosed())  
这两句话是不同的!!!!!!!!!!!!!!!!

#4


rs2,rs3建了不用,老做rs1.next()干吗?

#5


玩玩儿,你好!
    我知道那两句话不同,但现在的问题是编译不过去,这与‘简洁与’没有关系的!
    还有rs2,rs3的问题只是我没有修改过来,出错信息是已经修改好运行出的错误,jsp文件我想不会有问题,有问题它会提示jsp执行不了,可现在提示的信息应该是javabean文件的问题,初步认为是javabean调用函数完了后自动关闭了con或stmt,但con和stmt都不为null,所以才出的错,但我不知道怎么修正,我试过把
if(con == null)  //若con为null时, 重新建立资料库连结
{
       BulidConnection();
}

改为
BulidConnection();

编译通过执行还是出错!

#6


你把这一句:
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
放到这一句:
stmt.executeQuery(ExeSQL);
之前。

#7


没时间看你的代码,不过问题就是在连接数据库处!

#8


玩玩儿,布恩特
    你们都看了我的源程序,所以都给分,最终是玩玩儿帮我解决了问题,所以给50分,布恩特也看了但问题不在那里,所以就只给你10分,不要怪我,给你多我就没法向玩玩儿交代了,见凉

#1


if(con == null)  //若con为null时, 重新建立资料库连结
{
       BulidConnection();
}

改为
if(con == null || con.isClosed())  //若con为null时, 重新建立资料库连结
{
       BulidConnection();
}

#2


littlecpu,你好!
    我照你的用法做了,可还是出错!这又是什么问题?

scgraduate.java:106: unreported exception java.sql.SQLException; must be caught
or declared to be thrown
            if(con.isClosed() || con == null )  //若con为null时, 重新建立资料库
连结
                  ^
1 error

谢谢!

#3


if(con.isClosed() || con == null ) 
if(con == null || con.isClosed())  
这两句话是不同的!!!!!!!!!!!!!!!!

#4


rs2,rs3建了不用,老做rs1.next()干吗?

#5


玩玩儿,你好!
    我知道那两句话不同,但现在的问题是编译不过去,这与‘简洁与’没有关系的!
    还有rs2,rs3的问题只是我没有修改过来,出错信息是已经修改好运行出的错误,jsp文件我想不会有问题,有问题它会提示jsp执行不了,可现在提示的信息应该是javabean文件的问题,初步认为是javabean调用函数完了后自动关闭了con或stmt,但con和stmt都不为null,所以才出的错,但我不知道怎么修正,我试过把
if(con == null)  //若con为null时, 重新建立资料库连结
{
       BulidConnection();
}

改为
BulidConnection();

编译通过执行还是出错!

#6


你把这一句:
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
放到这一句:
stmt.executeQuery(ExeSQL);
之前。

#7


没时间看你的代码,不过问题就是在连接数据库处!

#8


玩玩儿,布恩特
    你们都看了我的源程序,所以都给分,最终是玩玩儿帮我解决了问题,所以给50分,布恩特也看了但问题不在那里,所以就只给你10分,不要怪我,给你多我就没法向玩玩儿交代了,见凉