首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

!使用ODBC:连接占线导致另一个hstmt 使用JDBC:Error establishing socket

2011-12-11 
在线等!!使用ODBC:连接占线导致另一个hstmt 使用JDBC:Error establishing socketSQLServer2000,SP2,j2sdk1

在线等!!使用ODBC:连接占线导致另一个hstmt 使用JDBC:Error establishing socket
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一闪而过,不明白什么意思。
着急啊....

[解决办法]
错误信息写错了,两个都写成ODBC的错误了,按上面的JDBC连接代码执行时Tomcat里显示Error establishing socket ,IE里显示:数据库操作错误信息:Java.lang.NullPointerException

热点排行