author :twei date:2005.6.18
本人其实笨鸟一个,关于JDBC Driver连接SQL Server 2000数据库的问题搞的我这个初学JSP的,就配置了一整天,到群里问了不少人,也到google里搜了不少相关的文章、帖子,却没有多少能讲清楚的,到的一个BLOG的帖子里说是XP-SP2D的端口1433,由于系统出于安全的顾虑,此端口被屏蔽了。解决的办法是卸载SP2,晕,如果这样,我的系统还能用吗?
最后在凌晨时分,终于发现了“jiaqi0012”在网上转的一个帖子,使我茅塞顿开。很快解决了这个烦人的问题。在此表示衷心的感谢!
现在特将此文章发表在自己的BLOG里,一边也是自己对这个知识的总结,另一方面,我发现在QQ群里,有人和我也有同样的困惑,希望这篇文章对他们也有一点点小小的帮助。
如有差错,还望各位高手指教,不胜感激。
连接前我所做的准备:
1、 到microsoft官方网站下载了Microsoft SQL Server 2000 Driver for JDBC驱动程序包,并安装配置环境变量,set classpath=.; 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
2、 本人用的是tomcat5,我为了保险把上面的三个文件(msbase.jar, mssqlserver.jar, msutil.jar )拷到tomcat5/common/lib下面,重新启动tomcat5。
下面是我的详细操作步骤:
1, 在SQL Server2000里创建一个testDB的数据库
Use master
Go
Create database testDB
On
(
Name=test_data,
Filename=’f:/sql2000/testDB/test_data.mdf’,
Size=2,
Maxsize=4,
Filegrowth=20%
)
Log on
(
Name=test_log,
Filename=’f:/sql2000/testDB/test_log.ldf’,
Size=1,
Maxsize=2,
Filegrowth=1
)
Go//创建users表
Use testDB
GoCreate table users
(
userID char(10) primary key,
username char(20) not null,
age int,
email char(18),
address char(40)
)
Go
插入3条记录:
Insert into users values(‘000001’,’为什么’,22,’twei@dfa .com’,’甘肃陇南市’)
Insert into users values(‘000002’,’小二i’,22,’sadfjadf@163.com’,’北京’)
Insert into users values(‘000056’,’往西’,22,’tafjsdfk@281.com’,’深圳’)Select * from users
2、 创建一个jdbcDriver.JSP文件,如下:
<html>
<head>
<title>利用JDBC Driver连接SQL Server 2000数据库</title>
</head>
<%@ page contentType=”text/html;charset=GB2312” %>
<%@ page language=”java” import=” java.sql.* ” %>
<center>
<h1>利用JDBC Driver连接SQL Server 2000数据库</h1>
</center>
<table>
<tr>
<td>用户ID</td>
<td>姓名</td>
<td>年龄</td>
<td>邮件</td>
<td>地址</td>
</tr>
</table>
<%
/*加载JDBC Driver*/
java.lang.Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=testDB";
String user="sa";
String password="pass";
Connection con=DriverManager.getConnection(url,user,password);
/*创建语句对象*/
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("select * from users");
while(rs.next())
{
%>
<tr>
<td><%= rs.getString("userID") %></td>
<td><%= rs.getString("username") %></td>
<td><%= rs.getString("age") %></td>
<td><%= rs.getString("email") %></td>
<td><%= rs.getString("address") %></td>
</tr>
<% }
rs.close();
con.close();
%>
</html>
好了,现在就OK了!?
启动tomcat5,sql server2000服务器,在地址栏输入http://localhost:8080/jdbcDriver.jsp回车。
现在会有这样的错误产生:
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Not suitable driver.
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:150)
没有合适的驱动器。
3、经过询问和查资料,看帖子。知道原来这个问题可能出在SQL Server 2000没有安装升级补丁。
所以,到微软的官方网站,直接下载个chs_sql2ksp3.exe.安装将SQL Server2000升级为sp3后,再运行看看;
结果还是出错,不能通过。提示错误信息如下:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establis
hing socket.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source
)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSConnection.<init>(Unknown Source) at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Sou
rce)
at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown S
ource)
4、在一个帖子里看到了,原来出现上边错误的主要原因是默认的数据库服务器端口 1433没有打开,无法直接连接。
我们将 SQL Server 2000升级到SP3后,再次启动tomcat5,启动SQL Server 2000服务器 ,发现有如下提示信息:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对
象名 'users' 无效。
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source
)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown
Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown
Source)
at com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(
Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Sour
ce)
在这里,其实我们可以发现用户SA已经登陆连接上数据库了,要不你把登陆密码设为空或者写个错误的密码,信息将提示 sa登陆失败。密码有错的提示。
解决这个的办法是我们进入企业管理器,找到 testDB数据库,选“用户”,单击右键,“ 新建用户”----》选择“sql身份验证”,并对新建的用户分配相应的权限,还要把我们自己建的testDB选为默认数据库,最后再把用户名和密码改一下,重新打开就可以了。
总结:
经过这个SQL Server 2000的连接,一定要注意,这里我们要选择使用SQL身份验证方式,还有那个1433端口的问题,其次就是以系统sa用户登陆的方式,不能找到我们自己的数据库里的表。好了,天都要亮了。
以后多交流,也多跟大家学吧!