我尝试着自己解决这个问题好几天了,实在解决不了,实在崩溃了,希望高手帮帮忙我的sql server2000打了sp4补丁,版本号2039.。。
我已经把jdbc的三个驱动放到指定地方了,包括放到jdk\lib,tomcat\lib,
我的环境变量是     CLASSPATH   .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\ext\mssqlserver.jar;%JAVA_HOME%\jre\lib\ext\msbase.jar;%JAVA_HOME%\jre\lib\ext\msutil.jar;%JAVA_HOME%\jre\lib\ext\sqljdbc.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\servlet-api.jar;CATALINA_HOME\lib\servlet-api.jar;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\msbase.jar;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\mssqlserver.jar;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\msutil.jar; 
                 PATH        %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\msbase.jar;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\mssqlserver.jar;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\msutil.jar; (总之哪怕重复,该放的我都放了)我的tomcat 的版本是6.0 
我的源代码是  
member.jsp  <%@ page import="java.sql.*"%> 
<%@ page errorPage="MemberErrorPage.jsp" %>
<jsp:useBean id="Member" scope="page" class="jsp.beans.MemberBean"/>
<jsp:useBean id="MemberData" scope="request" class="jsp.beans.MemberDataBean"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>MemberCard Login</title>
<style type="tect/css">
 body{
    font-family:tahoma,helvetica,arial,sans-serif;
}
table,tr,td{
font-size:9px;
boder:3px groove;
padding:5px;
background-color:#dddddd;
}
</style>
</head><body>
<jsp:setProperty name="Member" property="*"/>
<% if(Member.getMemberID()==null||Member.getNickname()==null||Member.getDept()==null||Member.getMobile()==null||Member.getCredit()==null){
%>
<form method="post"action="MemberCardLogin.jsp">
  <p>Enter your information to register in our database.</p>
  <table>
  <tr>
    <td>MemberID</td>
<td>
   <input type="text"name="MemberID"/>
    </td>
</tr>
  <tr>
     <td>Nickname</td>   
       <td>
   <input type="text"name="Nickname"/>
   </td>
  </tr>
<tr>
    <td>Department</td>
  <td>
   <input type="text"name="Dept"/>
       </td>
</tr>
<tr>
    <td>Mobile</td>
  <td>
   <input type="text"name="Mobile"/>
       </td>
</tr>
<tr>
    <td>QQ</td>
  <td>
   <input type="text"name="QQ"/>
       </td>
</tr>
<tr>
    <td>Email</td>
  <td>
   <input type="text"name="Email"/>
       </td>
</tr>
<tr>
    <td>Credit</td>
  <td>
   <input type="text"name="Credit"/>
       </td>
</tr>
<td colspan="2">
<input type="submit"value="Submit"/>
</td>
</tr>
</table>
</form>
<% }
 else{
 MemberData.addMember(Member);
 %>
 <jsp:forward page="MemberView.jsp"/>
 <%
   }  %>
 
</body>
</html>
 memberBean.class
package jsp.beans;
public class MemberBean{
private String MemberID,Nickname,Dept,Credit,Mobile,QQ,Email;
    public void setMemberID(String name){
MemberID=name;
}
    public String getMemberID(){
     return MemberID;
    }
    public void setNickname(String name){
     Nickname=name;
    }
   public String getNickname(){
        return Nickname;
   }
   public void setDept(String name){
         Dept=name;
   }
   public String getDept(){
        return Dept;
   }
   public void setCredit(String name){
        Credit=name;
   }
   public String getCredit(){
       return Credit;
   }
   public void setMobile(String name){
        Mobile=name;
   }
   public String getMobile(){
        return Mobile;
   }
   public void setQQ(String name){
         QQ=name;
   }
   public String getQQ(){
        return QQ;
   }
   public void setEmail(String name){
      Email=name;
   }
   public String getEmail(){
      return Email;
   }
}memberDataBean.class
package jsp.beans;
import java.io.*;
import java.sql.*;
import java.util.*;
public class MemberDataBean{
private Connection connection;
private Statement statement;
public MemberDataBean()throws Exception{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url="jdbc:microsoft:sqlserver://1ocalhost:1433;DatabaseName=BookStore";
connection=DriverManager.getConnection(url,"sa","sa");
statement=connection.createStatement();
}
    public List getMemberList() throws SQLException{
     List MemberList=new ArrayList();
     ResultSet results=statement.executeQuery("Select * from memberCard");
     while(results.next()){
     MemberBean member=new MemberBean();
     member.setMemberID(results.getString(1));
     member.setNickname(results.getString(4));
     member.setDept(results.getString(2));
         member.setMobile(results.getString(3));
         member.setQQ(results.getString(5));
         member.setEmail(results.getString(6));
         member.setCredit(results.getString(7));
         MemberList.add(member);
    
    
     }
    
    return MemberList;
    }
   public void addMember(MemberBean member)throws SQLException{
    statement.executeUpdate("insert into MemberCard"+" values('"+member.getMemberID()+"','"+member.getDept()+"','"
    +member.getMobile()+"','"+member.getCredit()+"','"+member.getNickname()+"','"+member.getQQ()+"','"+member.getEmail()+"')");
   }
   protected void finalize(){
    try{
   
    statement.close();
    connection.close();
    }
   catch(SQLException sqlException){
    sqlException.printStackTrace();
   }
   }
}
总是报错,javax.servlet.ServletException: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.MemberLogin_jsp._jspService(MemberLogin_jsp.java:167)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)救救我吧,我已经崩溃了好几天了

解决方案 »

  1.   

    那你配置本地数据源了吗?如果还不行的话,你换一个服务器试下,例如weblogic,有的数据库在tomcat里出异常,但是在weblogic就不会有问题。
      

  2.   

    如果你在测试连接SQL Server 2000 JDBC连接时出现错误Error establishing socket.请参考如下:
    用 CMD 命令NETSTAT查1433(这是默认的端口,可能被占用,你可以重新设一个新的端口)的端口可是居然没有没有打开,先看看你的服务器有没有打开,如果都大开了那就说明你没有装SQL的sp3或sp4的补丁. 还有一个方法看你是不是要打补丁,那就是看看你的版本号: 
    可以用如下的方式查看MSSQL的版本: 
    打开企业管理器-〉工具-〉SQL查询分析器-〉帮助-〉关于 
    查看MSSQL的详细版本号 
    如果 是 8.00.194 就是还没打补丁 
    8.00.760 就是SP3 
    8.00.2039 就是SP4 
    如果你的版本号是对的,但NETSTAT查1433没有,那可能你的1433端口被占了,换一个端口应该就可以了. 
    换端口的方法是:1. 打开企业管理器,依次在控制台根目录 ->Microsoft SQL Servers->SQL Server 组,列出一部分数据库服务器。 
    2. 右击我们要连接的数据库服务器,选择属性,在常规选项卡点击网络配置弹出新窗口。 
    3. 在启用的协议区域我们选择 TCP/IP ,点击属性按钮,弹出新窗口。在这个窗口有网络协议默认值设置,一般默认端口是:1433。 另有一篇网上的方法,供参考:如运行程序时出现 "Error establishing socket" 错误,则应进行如下调试:
    1 检查SQL SERVER 是否允许远程访问.具体步骤:1)打开"企业管理器",打开控制台根目录>SQL Server 组>数据库
    2)在相应"数据库"上单击右键,选择"属性"
    3)选择"连接"选项卡,检查"远程服务器连接"下,RPC服务是否选择.2 使用telnet IP地址 1433,系统是否提示连接出错,如系统提示出错
    检查是否防火墙屏蔽了SQL SERVER 或 java IDE 的网络访问端口
    如果是,关闭防火墙,重新启动SQL SERVER和java IDE,进行测试,
    如果系统仍提示上述错误,尝试下列步骤3 检查SQL SERVER 端口号及是否启用了TCP/IP协议,具体步骤:1)打开"企业管理器",打开控制台根目录>SQL Server 组>数据库
    2)在相应"数据库"上单击右键,选择"属性"
    3)选择"常规"选项卡,点击"网络配置",如启用的协议中无"TCP/IP协议"将其加入
    4)选择"TCP/IP协议",点击"属性",检查其端口号是否为1433
    5)如端口号为1433将其修改为其它端口号,修改jdbc连接语句,将端口号同样改为新启用的端口号,如jdbc:microsoft:sqlserver://server_name:1400(假设新端口号为 1400)以下的方法你每种的去试试:
    #检查一下sql server的connection有没有full.#如果是认证的问题.
    可到sql enterprice manager->指定server->内容->安全性.
    把验证改为 SQL server 及 windows.#点选属性检查一下port是否正确.#执行%MSSQL_HOME%\80\Tools\Binn\SVRNETCN.exe
    把TCP/IP启用.#关掉防火墙.#把SQL server update到sp3:
    http://www.microsoft.com/sql/downloads/2000/sp3.asp经我验证,一般升级到sp3就好用了!
      

  3.   

    我确定我打上补丁了,select @@version我还是会用的,weblogic要收费不?,本地数据源我肯定配上了,而且测试过了,而且我单独用Jsp和sql是能连的,但用javabean就报错了,1433我确定开了,telnet是通的,而且我确定是sqlserver端口号是1433.至于四楼的帖子上介绍的方法我都满足,我开始怀疑我的操作系统了
      

  4.   

    如果用的是sql2000数据库确保打上sp3或者sp4补丁了
      

  5.   

    拿你的代码,我用sql2005,启动时,并没有报你所谓的那个异常...
    String url="jdbc:microsoft:sqlserver://1ocalhost:1433;DatabaseName=BookStore"; 
    你不会连错数据库吧,应该不会.呵呵,建议LZ设断点调试下,一般这样的问题,很快就解决的.
      

  6.   

    建议LZ用MYECLIPSE里连接sqlserver,看看能不能连接上
      

  7.   

    请问怎样连接?。我属于Java入门级,我MYECLIPSE的版本是6.0都是英文看不懂。。
      

  8.   

    今天又试了下,用单纯的jsp是能连上的
    <%@ page contentType="text/html;charset=gb2312"%> 
    <%@ page import="java.sql.*"%> 
    <html> 
    <body> 
    <%
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
    String url="jdbc:microsoft:sqlserver://localhost:1433;databasename=BookStore"; 
    //pubs为你的数据库的 String user="sa"; 
    String password="sa"; 
    Connection conn= DriverManager.getConnection(url,user,password); 
    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
    String sql="select * from  memberCard"; 
    ResultSet rs=stmt.executeQuery(sql); 
    while(rs.next()) {%> 
    您的第一个字段内容为:<%=rs.getInt(1)%> 
    您的第二个字段内容为:<%=rs.getString(2)%> 
    您的第三个字段内容为:<%=rs.getString(3)%> 
    <%}%> 
    <%out.print("数据库操作成功,恭喜你");%> 
    <%rs.close(); 
    stmt.close(); 
    conn.close(); 
    %> 
    </body> 
    </html> 
    但用了javabean还是报错 error socket
      

  9.   

    是不是sqlserver的身份验证只选中仅Windows,要选中 SQL SERVER 和Windows,如果选中了还不行的话,那把数据库用户删掉再重新建一个
      

  10.   

    1.  打开企业管理器,依次在控制台根目录 ->Microsoft SQL Servers->SQL Server 组,列出一部分数据库服务器。 2.  右击我们要连接的数据库服务器,选择属性,在常规选项卡点击网络配置弹出新窗口。 3.  在启用的协议区域我们选择 TCP/IP ,点击属性按钮,弹出新窗口。在这个窗口有网络协议默认值设置,我在这里看到我的默认端口是: 4067 。因面在使用 1433 连接数据库时出错。   把端口号修改为 4067 即修改: static String url =        "jdbc:microsoft:sqlserver://127.0.0.1:1433;dataBaseName=Test" ; 为: static String url =        "jdbc:microsoft:sqlserver://127.0.0.1:4067;dataBaseName=Test" ;   测试连接成功。 
      

  11.   

    呃,其实一直不好意思来说
     
    我的错误是从网上面粘了一段代码而这段代码是url="jdbc:microsoft:sqlserver://1ocalhost:1433;DatabaseName=BookStore";大家仔细看看是错在哪我找了很长时间才发现 是localhost 再仔细看看错在哪,那上面是 1 而不是 l ,写出来是想告诉大家,有时候因为你的疏忽,一个微小的失误都能让你忙活半天,还有就是以后不要偷懒粘代码,至少不要轻易相信网上的代码了,最后手打一遍,也熟悉下呵呵,浪费了大家时间,实在不好意思
      

  12.   

    把SQLServer升级到SP4版本就行了,以前我也是遇到过这种问题