// 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();
}
{
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
谢谢!
我照你的用法做了,可还是出错!这又是什么问题?
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())
这两句话是不同的!!!!!!!!!!!!!!!!
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();
编译通过执行还是出错!
我知道那两句话不同,但现在的问题是编译不过去,这与‘简洁与’没有关系的!
还有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);
之前。
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
放到这一句:
stmt.executeQuery(ExeSQL);
之前。
#7
没时间看你的代码,不过问题就是在连接数据库处!
#8
玩玩儿,布恩特
你们都看了我的源程序,所以都给分,最终是玩玩儿帮我解决了问题,所以给50分,布恩特也看了但问题不在那里,所以就只给你10分,不要怪我,给你多我就没法向玩玩儿交代了,见凉
你们都看了我的源程序,所以都给分,最终是玩玩儿帮我解决了问题,所以给50分,布恩特也看了但问题不在那里,所以就只给你10分,不要怪我,给你多我就没法向玩玩儿交代了,见凉
#1
if(con == null) //若con为null时, 重新建立资料库连结
{
BulidConnection();
}
改为
if(con == null || con.isClosed()) //若con为null时, 重新建立资料库连结
{
BulidConnection();
}
{
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
谢谢!
我照你的用法做了,可还是出错!这又是什么问题?
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())
这两句话是不同的!!!!!!!!!!!!!!!!
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();
编译通过执行还是出错!
我知道那两句话不同,但现在的问题是编译不过去,这与‘简洁与’没有关系的!
还有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);
之前。
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
放到这一句:
stmt.executeQuery(ExeSQL);
之前。
#7
没时间看你的代码,不过问题就是在连接数据库处!
#8
玩玩儿,布恩特
你们都看了我的源程序,所以都给分,最终是玩玩儿帮我解决了问题,所以给50分,布恩特也看了但问题不在那里,所以就只给你10分,不要怪我,给你多我就没法向玩玩儿交代了,见凉
你们都看了我的源程序,所以都给分,最终是玩玩儿帮我解决了问题,所以给50分,布恩特也看了但问题不在那里,所以就只给你10分,不要怪我,给你多我就没法向玩玩儿交代了,见凉