Java如何了连接Microsoft SQL Server 2000??
开发环境:JBuilder2006,选择使用的服务器tomcat5.5.9
按照相关说明下载了Microsoft SQL Server 2000补丁,安装后将
C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib
目录下的三个文件msbase,mssqlserver,msutil拷贝到tomcat下的comon\lib下
(D:\Borland\JBuilder2006\thirdparty\jakarta-tomcat-5.5.9\common\lib)下代码如下,
Bean代码:
package myprg;
import java.sql.*;
/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2008</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class firm {
    //String strDbDriver="sun.jdbc.odbc.JdbcOdbcDriver";
    //String strDbUrl="jdbc:odbc:firm";    String strDbDriver2="com.microsoft.jdbc.sqlserver.SQLServerDriver";
    String strDbUrl2="jdbc:microsoft:sqlserver://localhost;DatabaseName=KCBusMag;SelectMethod=cursor";    private Connection conn=null;
    private Statement stmt=null;
    ResultSet rs=null;
    //<!--注册数据库驱动程序-->
    public firm() {
        try
        { Class.forName(strDbDriver);
        }
        catch(java.lang.ClassNotFoundException e)
        {System.err.println("firm():"+e.getMessage() ); }
    }    //<!--建立数据库连接及数据查询-->
    public ResultSet executeQuery(String sql)
    { rs=null;
      try
      {
          conn=DriverManager.getConnection(strDbUrl,"sa","");
          stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
          //stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE) ;
          rs=stmt.executeQuery(sql) ;
      }
      catch(SQLException ex)
      {
          System.err.println("aq.executeQuery():"+ex.getMessage()) ;
      }
      return rs;
  }
  //<!--定义数据操作-->
  public void executUpdate(String sql)
  { stmt=null;
    rs=null;
    try
    {
        conn=DriverManager.getConnection(strDbUrl,"sa","");
        stmt=conn.createStatement() ;
        stmt.executeQuery(sql) ;
        stmt.close();
        conn.close() ;
    }
    catch(SQLException ex)
    {
        System.err.println("aq.executeQuery():"+ex.getMessage()) ;
      }
   }
  public void closeStmt()
  {   try
      { stmt.close();}
      catch(SQLException ex)
      {
          ex.printStackTrace() ;
      }
  }
  public void closeConn()
  {  try
      { conn.close();}
      catch(SQLException ex)
      {
          ex.printStackTrace() ;
      }  }}
网页文件代码:
<%@ page contentType="text/html; charset=GB2312" %>
<%@ page import="java.sql.*"  %>
<%@ page errorPage="Default_error.jsp" %>
<html>
<head>
<title>
Default
</title>
</head>
<jsp:useBean id="dbBean" scope="session" class="myprg.firm" />
<jsp:useBean id="defaultBeanId" scope="session" class="myprg.DefaultBean" />
<jsp:setProperty name="defaultBeanId" property="*" />
<body bgcolor="#ffffff">
<h1>
JBuilder Generated JSP
</h1>
<form method="post" action="Default.jsp">
<br>Enter new value   :  <input name="sample"><br>
<br><br>
<input type="submit" name="Submit" value="Submit">
<input type="reset" value="Reset">
<br>
Value of Bean property is :<jsp:getProperty name="defaultBeanId" property="sample" />
</form>
<table border="1" width="100%" cellspacing="0" cellpadding="0">
<%
try
{
String sqlStr="Select Dept_Code,Dept_Name From EM_DeptArchives";
String sqlStr2="insert EM_DeptArchives (Dept_Code,Dept_Name) Values('6','拍拍部')";
//String sqlStr="Select * from EM_PersonArchives";
dbBean.executUpdate(sqlStr2);
ResultSet rs=dbBean.executeQuery(sqlStr) ;
rs.first();
while(rs.next())
%>
<tr >
   <td width="20%"> <%=rs.getString("Dept_Code") %></td>
   <td width="40%"> <%=rs.getString("Dept_Name").getBytes("8859_1") %></td>
   <td width="40%"> Hello</td>
</tr>
<%
rs.close();
}
catch(SQLException ex)
{
    System.err.println("aq.executeQuery():"+ex.getMessage()) ;
}dbBean.closeStmt();
dbBean.closeConn();
%></table>
</body>
</html>提示错误::
aq.executeQuery():[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.

解决方案 »

  1.   

    大家都知道在xp 系统上无法安装sql server 企业版,只可以安装个人版,本来个人版也是可以的,但是由于微软公司关于一个安全性问题的考虑,让个人版的sql server 不监听1433端口.故jsp在通过驱动连接数据库的时候会出现该Error establishing socket错误,
    所以如果通过jdbc连接sql server 就必须给数据库打补丁,许多人都说sp3,sp4都可以,但我只用过sp3.
      (其实很久以前我就听说过需要打补丁,在网上找的时候发现sp3有3个,不知道自己该用哪一个,后来一狠心全下载下来,准备都安了,没想到还有人说按这3个还有个顺序呢,)
      现在我上下载的第3个,叫sql2ksp3.exe,下下来是exe文件,执行它,随便选个文件夹运行,然后打开该文件夹,执行里面的setup.bat,这样你的数据库就打上了补丁了,并且1433端口就监听了,
    然后你在执行你的连接文件,就可以了,
      有的时候还会出现一个问题说是什么sa用户没有建立可信任的连接,好象是这么个意思我记得不是很清楚了,这是因为你安装数据库的时候选用的是 windows验证,应该选用混合模式,你打开企业管理器,选操作,点属性,在安全性中选择sql server 和windows这个选项,点确定,然后重启sqlserver和你的web服务器,在运行你的连接文件应该就可以了,
      

  2.   

      try 
          { 
              conn=DriverManager.getConnection(strDbUrl,"sa",""); 
              stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 
              //stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE) ; 
              rs=stmt.executeQuery(sql) ; 
          } 
          catch(SQLException ex) 
          { 
              System.err.println("aq.executeQuery():"+ex.getMessage()) ; 
          } 
    这里报错说明驱动加载上了 你的conn获取肯定错误 没用过sql server不过你url的端口号不会自己改成80了吧 那肯定是有冲突的
      

  3.   

     "jdbc:microsoft:sqlserver://localhost;DatabaseName=KCBusMag;SelectMethod=cursor"; 
    这一行加入个端口
    "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=KCBusMag;SelectMethod=cursor"; 
      

  4.   

    修改后,jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=KCBusMag;SelectMethod=cursor
    并打上Sqlserver200补丁后,还有问题??
    原来是用odbc的,有问题,后试用jdbc,出现了同样的问题??
    aq.executeQuery():[Microsoft][SQLServer 2000 Driver for JDBC]No ResultSet set was produced.
    aq.executeQuery():[Microsoft][SQLServer 2000 Driver for JDBC]Invalid operation for the current cursor position.//[Odbc]
        //String strDbDriver="sun.jdbc.odbc.JdbcOdbcDriver";
        //String strDbUrl="jdbc:odbc:firm";
    //[Jdbc]
        String strDbDriver2="com.microsoft.jdbc.sqlserver.SQLServerDriver";
        String strDbUrl2="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=KCBusMag;SelectMethod=cursor";
      

  5.   

    谢谢各位的积极回答,原来什么都靠自己找,现在有你们的帮忙,我觉得更有信心做Java
    原自学过spring,hibernate等,现在又得重新熟悉,谢谢
      

  6.   


    连接mysql与odbc,jdbc连接sqlser2000出现类似错误:
    aq.executeQuery():After end of result set还是查询出来的结果集,受到游标影响
    这个不知怎么处理?
      

  7.   

    1 装 SP4
    2 去精华区找一个帖子,里面有详细介绍!
    3 看这里 http://www.java2000.net/viewthread.jsp?tid=394
      

  8.   

    http://blog.csdn.net/songfuqiang/archive/2007/11/16/1888019.aspx 看看这个
      

  9.   

    没有给sql2000打sp4补丁,不打这个补丁1433这个端口默认不打开,所以无法连接成功
      

  10.   

    连接都可以的,还执行了insert语句,并且成功,只是查询不出数据?
      

  11.   

    public Connection getConnection() {
    Connection con = null; try {
    //ロードの駆動
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    //データベースにつながります
    con = DriverManager
    .getConnection("jdbc:odbc:test","sa","admin");
    } catch (Exception e) {
    e.printStackTrace();
    } return con;
    }在上面import java.sql.*;就可以了。我就这么用的
      

  12.   

    对啊,都引入java.sql.*;
    可能是操作系统关系吧 win2003也会有问题,我还是用xp去好
    谢谢各位了