SQLServer2000,SP2,j2sdk1.4.2,Tomcat4.0;
这个部分去年用的时候还好好的,可最近再次运行的时候就出现了错误了...机子中间重装过系统,现在也配置好了啊,Java,Tomcat运行都没问题。代码保证没变...纳闷了
一个学生登陆在线考试的部分,说是数据库连接对象使用完没关吧,可这个是刚登陆就出问题,对数据库只执行了查询 ,代码:
Bean:
//实现一个javabean基类,封装了建立数据库联接,执行数据库表格查询,更新数据库表格内容,关闭数据库连接等功能,
//供它的子类直接使用。还提供一个toChinese()方法,主要用来中文数据的处理。package mybean;
import java.*;
import java.sql.*;public class ksxtdb{
static Connection con = null;
Statement stmt=null; //用于将SQL语句发送到数据库
ResultSet rs=null;
//database的构造函数
public ksxtdb(){
}
public static void getConnection(){
try{
//注册数据库驱动程序为微软提供的jdbc驱动
String url = "jdbc:microsoft:sqlserver://";
String serverName= "10.1.17.23";
String portNumber = "1433";
String databaseName= "TK1";
String userName = "sa";
String password = "tk";
String selectMethod = "cursor";
String getConnectionUrl=url+serverName+":"+portNumber+";databaseName="+databaseName+";selectMethod="+selectMethod+";";
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = DriverManager.getConnection(getConnectionUrl,userName,password); //建立连接
}
catch(java.lang.ClassNotFoundException e){
//方便调试程序,出错打印mydatabase()就知道在什么地方错了
System.err.println("mydatabase():"+e.getMessage());
}
catch(java.sql.SQLException e){
System.err.println("mydatabase"+e.getMessage());
}
}
//关闭数据库连接
public void closeConnection(){
try{
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(con!=null)
con.close();
}
catch(java.sql.SQLException e){
System.err.println("mydatabase():"+e.getMessage());
}
rs=null;
stmt=null;
con=null;
}
//executeQuery方法用于进行记录的查询操作
//入口参数为sql语句,返回ResultSet对象
public ResultSet executeQuery(String sql){
rs=null;
try{
if(con==null)
getConnection();
if(con!=null){
stmt=con.createStatement();
//执行数据库操作
rs=stmt.executeQuery(sql);
}
}
catch(SQLException ex){
System.err.println("mydatabase.executeQuery:"+ex.getMessage()+" 4这错!");
}
return rs;
}
//executeUpdate方法用于进行add或者update记录的操作
//入口参数为sql语句,成功返回true,否则为false
public boolean executeUpdate(String sql){
boolean bupdate=false;
try{
//建立数据库连接
if(con==null)
getConnection();
if(con!=null){
stmt=con.createStatement();
int rowCount=stmt.executeUpdate(sql);
//如果不成功,bupdate就会返回false
if(rowCount!=0)
bupdate=true;
}
}
catch(SQLException ex){
//打印出错信息
System.err.println("mydatabase.executeupdate:"+ex.getMessage());
}
return bupdate;
}
//toChinese方法用于将一个字符串进行中文处理
//否则将会是???这样的字符串
public static String toChinese(String strvalue){
try{
if(strvalue==null) return null;
else{
strvalue=new String(strvalue.getBytes("ISO8859_1"),"GBK");
return strvalue;
}
}
catch(Exception e){
return null;
}
}
}
JSP代码:
<%@ page contentType="text/html; charset=GB2312" %>
<%@ page language="java" import="java.sql.*" %>
<jsp:useBean id="conn" scope="page" class="mybean.ksxtdb"/>
<%!
ResultSet rs1=null;
ResultSet rs2=null;
String ID="";
String sql1="";
String sql2="";
%>
<%
ID=request.getParameter("studentid");
if(ID==null || ID.equals("")){ //防止非法输入登录
out.println("<center>");
out.println("<h1>学号输入非法!请重新输入!</h1><br><br>");
out.println("<a href=javascript:history.back()>返回</a>");
out.println("</center>");
return;
}
sql1="select * from Student_info where studentid='"+ID+"'";
sql2="select * from System_parameter where studentid='"+ID+"'";
try{
rs1=conn.executeQuery(sql1);
rs2=conn.executeQuery(sql2);
//如果是非法学号,回到登录界面
if(!rs1.next()){
%>
<jsp:forward page="index.jsp">
<jsp:param name="errmsg" value="Invalid Student ID!"/>
</jsp:forward>
<%
}
if(!rs2.next()){
session.setAttribute("studentlogin",ID);//将学生登录学号保存到session中
session.setMaxInactiveInterval(60*60*24);
response.sendRedirect("../exam/login.jsp");
}else{
if(rs2.getInt("state")==1){
//添加强行关闭窗口代码
out.println("<center>");
out.println("<br><br><hr><h1>您已正常提交试卷,请退出该系统!</h1><br><br>");
%>
<script language="javascript">
document.title="关闭窗口";
</script>
<%
out.println("<a href=javascript:window.close() size=4>关闭窗口</a>");
out.println("</center>");
}
else{
session.setAttribute("studentlogin",ID);//将学生登录学号保存到session中
session.setMaxInactiveInterval(60*60*24);
response.sendRedirect("../exam/login.jsp");
}
}
}catch(Exception e){
System.out.println(e.toString());
%>
<jsp:forward page="../public/dberror.jsp">
<jsp:param name="e" value="<%=e%>"/>
</jsp:forward>
<%
}
%>
学生登陆后,如果学号错误,也能正常提示Invalid Student ID!,如果正确,登陆掉转到check.jsp时就直接提示错误信息:
IE里显示:数据库操作错误信息:java.lang.NullPointerException
Tomcat里就会出现:[Microsoft][ODBC SQL Server Driver]连接占线导致另一个 hstmt 4这错!(因为错误提示的地方标上4这错了),在Bean的查询部分里面。
自己调的时候加了个RS1.close(),还是这个错误...
怕是驱动的问题,用ODBC连接时出现:Tomcat里显示:连接占线导致另一个hstmt ,IE里显示:数据库操作错误信息:java.lang.NullPointerException 另外:防火墙已关闭,补丁已从SP3打到SP4,SQLServer2000是混合模式认证,而且TCP/IP端口设置为1433。在运行里面输入netstat -a一闪而过,不明白什么意思。
着急啊....
这个部分去年用的时候还好好的,可最近再次运行的时候就出现了错误了...机子中间重装过系统,现在也配置好了啊,Java,Tomcat运行都没问题。代码保证没变...纳闷了
一个学生登陆在线考试的部分,说是数据库连接对象使用完没关吧,可这个是刚登陆就出问题,对数据库只执行了查询 ,代码:
Bean:
//实现一个javabean基类,封装了建立数据库联接,执行数据库表格查询,更新数据库表格内容,关闭数据库连接等功能,
//供它的子类直接使用。还提供一个toChinese()方法,主要用来中文数据的处理。package mybean;
import java.*;
import java.sql.*;public class ksxtdb{
static Connection con = null;
Statement stmt=null; //用于将SQL语句发送到数据库
ResultSet rs=null;
//database的构造函数
public ksxtdb(){
}
public static void getConnection(){
try{
//注册数据库驱动程序为微软提供的jdbc驱动
String url = "jdbc:microsoft:sqlserver://";
String serverName= "10.1.17.23";
String portNumber = "1433";
String databaseName= "TK1";
String userName = "sa";
String password = "tk";
String selectMethod = "cursor";
String getConnectionUrl=url+serverName+":"+portNumber+";databaseName="+databaseName+";selectMethod="+selectMethod+";";
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = DriverManager.getConnection(getConnectionUrl,userName,password); //建立连接
}
catch(java.lang.ClassNotFoundException e){
//方便调试程序,出错打印mydatabase()就知道在什么地方错了
System.err.println("mydatabase():"+e.getMessage());
}
catch(java.sql.SQLException e){
System.err.println("mydatabase"+e.getMessage());
}
}
//关闭数据库连接
public void closeConnection(){
try{
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(con!=null)
con.close();
}
catch(java.sql.SQLException e){
System.err.println("mydatabase():"+e.getMessage());
}
rs=null;
stmt=null;
con=null;
}
//executeQuery方法用于进行记录的查询操作
//入口参数为sql语句,返回ResultSet对象
public ResultSet executeQuery(String sql){
rs=null;
try{
if(con==null)
getConnection();
if(con!=null){
stmt=con.createStatement();
//执行数据库操作
rs=stmt.executeQuery(sql);
}
}
catch(SQLException ex){
System.err.println("mydatabase.executeQuery:"+ex.getMessage()+" 4这错!");
}
return rs;
}
//executeUpdate方法用于进行add或者update记录的操作
//入口参数为sql语句,成功返回true,否则为false
public boolean executeUpdate(String sql){
boolean bupdate=false;
try{
//建立数据库连接
if(con==null)
getConnection();
if(con!=null){
stmt=con.createStatement();
int rowCount=stmt.executeUpdate(sql);
//如果不成功,bupdate就会返回false
if(rowCount!=0)
bupdate=true;
}
}
catch(SQLException ex){
//打印出错信息
System.err.println("mydatabase.executeupdate:"+ex.getMessage());
}
return bupdate;
}
//toChinese方法用于将一个字符串进行中文处理
//否则将会是???这样的字符串
public static String toChinese(String strvalue){
try{
if(strvalue==null) return null;
else{
strvalue=new String(strvalue.getBytes("ISO8859_1"),"GBK");
return strvalue;
}
}
catch(Exception e){
return null;
}
}
}
JSP代码:
<%@ page contentType="text/html; charset=GB2312" %>
<%@ page language="java" import="java.sql.*" %>
<jsp:useBean id="conn" scope="page" class="mybean.ksxtdb"/>
<%!
ResultSet rs1=null;
ResultSet rs2=null;
String ID="";
String sql1="";
String sql2="";
%>
<%
ID=request.getParameter("studentid");
if(ID==null || ID.equals("")){ //防止非法输入登录
out.println("<center>");
out.println("<h1>学号输入非法!请重新输入!</h1><br><br>");
out.println("<a href=javascript:history.back()>返回</a>");
out.println("</center>");
return;
}
sql1="select * from Student_info where studentid='"+ID+"'";
sql2="select * from System_parameter where studentid='"+ID+"'";
try{
rs1=conn.executeQuery(sql1);
rs2=conn.executeQuery(sql2);
//如果是非法学号,回到登录界面
if(!rs1.next()){
%>
<jsp:forward page="index.jsp">
<jsp:param name="errmsg" value="Invalid Student ID!"/>
</jsp:forward>
<%
}
if(!rs2.next()){
session.setAttribute("studentlogin",ID);//将学生登录学号保存到session中
session.setMaxInactiveInterval(60*60*24);
response.sendRedirect("../exam/login.jsp");
}else{
if(rs2.getInt("state")==1){
//添加强行关闭窗口代码
out.println("<center>");
out.println("<br><br><hr><h1>您已正常提交试卷,请退出该系统!</h1><br><br>");
%>
<script language="javascript">
document.title="关闭窗口";
</script>
<%
out.println("<a href=javascript:window.close() size=4>关闭窗口</a>");
out.println("</center>");
}
else{
session.setAttribute("studentlogin",ID);//将学生登录学号保存到session中
session.setMaxInactiveInterval(60*60*24);
response.sendRedirect("../exam/login.jsp");
}
}
}catch(Exception e){
System.out.println(e.toString());
%>
<jsp:forward page="../public/dberror.jsp">
<jsp:param name="e" value="<%=e%>"/>
</jsp:forward>
<%
}
%>
学生登陆后,如果学号错误,也能正常提示Invalid Student ID!,如果正确,登陆掉转到check.jsp时就直接提示错误信息:
IE里显示:数据库操作错误信息:java.lang.NullPointerException
Tomcat里就会出现:[Microsoft][ODBC SQL Server Driver]连接占线导致另一个 hstmt 4这错!(因为错误提示的地方标上4这错了),在Bean的查询部分里面。
自己调的时候加了个RS1.close(),还是这个错误...
怕是驱动的问题,用ODBC连接时出现:Tomcat里显示:连接占线导致另一个hstmt ,IE里显示:数据库操作错误信息:java.lang.NullPointerException 另外:防火墙已关闭,补丁已从SP3打到SP4,SQLServer2000是混合模式认证,而且TCP/IP端口设置为1433。在运行里面输入netstat -a一闪而过,不明白什么意思。
着急啊....
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货