现在的位置: 首页 > 综合 > 正文

Java/JSP中使用JDBC连接SQL Server 2000/2005

2013年07月29日 ⁄ 综合 ⁄ 共 4741字 ⁄ 字号 评论关闭

转自:http://hi.baidu.com/huangdonghui/blog/item/87cf4ff47ba653e37609d7e1.html/cmtid/9c82350965721ba22eddd4db

 

1.

准备工作


首先,操作系统中安装好SQL Server 2000/2005,如果系统中都装有2000和2005版,记得停用一个,只开一个行了。

然后,到微软网站下载Microsoft SQL Server 2005 JDBC Driver 1.1,也可以使用这个地址直接下载

解压sqljdbc_1.1.1501.101_chs.exe,把sqljdbc_1.1复制到%ProgramFiles%(如果系统在C盘则为C:\Program Files)。

设置 Classpath

JDBC 驱动程序并未包含在 Java SDK 中。因此,如果要使用该驱动程序,必须将 classpath 设置为包含 sqljdbc.jar 文件。如果 classpath 缺少 sqljdbc.jar 项,应用程序将引发“找不到类”的常见异常。

sqljdbc.jar 文件的安装位置如下:

<安装目录>\sqljdbc_<版本>\<语言>\sqljdbc.jar

下面是用于 Windows 应用程序的 CLASSPATH 语句实例:

CLASSPATH =.;%ProgramFiles%\sqljdbc_1.1\chs\sqljdbc.jar

下面是用于 Unix/Linux 应用程序的 CLASSPATH 语句实例:

CLASSPATH =.:/home/usr1/mssqlserver2005jdbc/Driver/sqljdbc_1.1/chs/sqljdbc.jar

注意: 在 Window 系统中,如果目录名长于 8.3 或文件夹名中包含空格,将导致 classpath 出现问题。如果怀疑存在这类问题,应暂时将 sqljdbc.jar 文件移动到名称简单的目录中,例如 C:\Temp,更改 classpath,然后测试这样是否解决了问题。

直接在命令提示符运行的应用程序

在操作系统中配置 classpath。将 sqljdbc.jar 追加到系统的 classpath 中。或者,使用 java -classpath选项,可以在运行此应用程序的 Java 命令行上指定 classpath。

设置SQL Server服务器

我使用的是SQL Server 2005标准版SP2,这些都默认即可,一般不用配置。如果需要配置端口请看下面。

1、“开始”→“程序”→“Microsoft SQL Server 2005”→“配置工具”→“SQL Server 配置管理器”→“SQL Server 2005 网络配置”→“MSSQLSERVER 的协议”
2、如果“TCP/IP”没有启用,右键单击选择“启动”。
3、双击“TCP/IP”进入属性设置,在“IP 地址”里,可以配置“IPAll”中的“TCP 端口”,默认为1433。
4、重新启动SQL Server或者重启计算机。

创建数据库

打开“SQL Server Management Studio”,登录连接SQL Server服务器,新建数据库,命名为test

在Eclipse中测试

1、打开Eclipse,“文件”→“新建”→“项目”→“Java 项目”,项目名为Test
2、在Eclipse中,选择“窗口”→“首选项...”→“Java”→“已安装的 JRE”,选择已安装的 JRE,点击“编辑”→“添加外部”,选择%ProgramFiles%\sqljdbc_1.1\chs\sqljdbc.jar
3、在Test项目的“JRE 系统库”中可以看见
sqljdbc.jar,如果没有可以
右键单击项目Test→“构建路径”→“配置构建路径...”→“Java 构建路径”→“库”→“添加外部 JAR...”,选择%ProgramFiles%\sqljdbc_1.1\chs\sqljdbc.jar
4、
编写Java代码,如下:

import java.sql.*;

public class Test {
public static void main(String[] srg) {
   String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";   //加载JDBC驱动
   String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=test";   //连接服务器和数据库test
   String userName = "sa";   //默认用户名
   String userPwd = "123456";   //密码
   Connection dbConn;

   try {
   Class.forName(driverName);
   dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
   System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!
   } catch (Exception e) {
   e.printStackTrace();
   }
}
}


注:

1、因为SQL Express这个版本的服务器默认是禁用的并且端口号没有配置,所以要进行重新设置

2、如果你以前用Java连接SQL Server 2000的话就要注意了:

在SQL Server 2000 中加载驱动和URL路径的语句是

String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String dbURL = "jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sample";

而SQL Server 2005 中加载驱动和URL的语句则为

String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=sample";

如果写法错误将会找不到驱动。

 

2.JSP连接SQL2000的时候出现问题,SP4补丁已经打过了,端口也开启了.出现如下问题:

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'sf_testpaper' 无效。 at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source) at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)....

解决方法:

将DbConnection dbConnection=new DbConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=abc");

改为:DbConnection dbConnection=new DbConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=abc");

不知道莫名其妙的不认识localhost.弄了一天了......

 

——————————————————————————————————————————————————————

PS:通过各种尝试和摸索,发现上面文章写的做法可以改进:

环境:JDK1.6.0.30+TomCat6.0+MyEclipse8.5+sqljdbc_3.0.1301.101_chs

做法:

【Classpath不用再环境变量里配置;】

【Eclipse中,选择“窗口”→“首选项...”→“Java”→“已安装的 JRE,这个也是不需要的;】

关于JDBC文件,首先下载,然后解压把sqljdbc4.jar拷贝到WEB_INF/lib下,然后刷新一下项目即可。

至于用sqljdbc4.jar与用sqljdbc.jar的区别,就是上文转载提到的“驱动URL路径”的区别。sqljdbc4.jar对应2005数据库写法,sqljdbc.jar的对应2000数据库的写法。但是sqljdbc4.jar不必须连接2005数据库,连接2000的也是可以的。

另外最后需要注意的是,SQL2000必须打上SP4补丁。不然是无法连接成功的。

参考DEMO代码:

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*,java.util.*" errorPage="" %>
<%@page import="javax.servlet.jsp.tagext.TryCatchFinally"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
        <%
            Connection con;
            Statement sql;
            ResultSet rs;
            try
            {

                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=pubs;","sa","sa");
                sql = con.createStatement();
                rs = sql.executeQuery("select * from jobs");
                
                rs.next();
                out.println(rs.getString("job_desc"));
                rs.close();
                sql.close();
                con.close();                
            }
            catch(SQLException ex)
            {
                out.println(ex);
            }
        %>
</body>
</html>

 

抱歉!评论已关闭.