JDBC 连接 SQL Serve 2000 总结
一、 JDBC 四类驱动程序概述
JavaSoft定义了4种JDBC驱动程序类型。理解各种类型的特征是非常重要的,这样才可以选出适当的类型。
JDBC-ODBC桥
它提供了从JDBC到ODBC的转换。这个桥使用了本地的ODBC方法,因此限制了它的使用。可能会在下列情况下使用这个桥:
î 快速的系统原型。
î 第三方数据库系统。
î 提供了ODBC驱动程序但没有提供JDBC驱动程序的数据库系统。
î 已经使用了ODBC驱动程序的低成本数据库解决方案。
Java到本地API
它利用开发商提供的本地库函数来直接与数据库通讯。由于使用了本地库,所以这类驱动程序有许多和JDBC-ODBC桥一样的限制。最大的限制是它不能被不可信的Applet所使用,另外还要注意的是,由于JDBC驱动程序使用了本地库,所以这些库必须在每一台使用这个驱动程序的电脑上安装和配置,这样给应用程序的分发带来了麻烦。大多数主要的数据库厂商在他们的产品中提供这一类驱动程序。以下情况可以考虑使用Java到本地的驱动程序。
î 代替JDBC-ODBC桥。
î 使用了一种已提供这类驱动程序的主流数据库作为一种低成本的数据库解决方案。
JDBC网络纯Java驱动程序
这种类型具有最大的灵活性。它可以用在一个第三方的解决方案中,而且可以在Internet上使用。驱动程序是纯Java的,而且可以通过驱动程序厂商所创建的专用网络协议和某种中间件通讯。这个中间件通常位于Web服务器上或者数据库服务器上,并且可以和数据库进行通讯。这一类驱动程序通常是由与特定数据库产品无关的公司开发的,而且由于它的优越性,所以价格相对贵一些。以下情况可以考虑使用JDBC网络纯Java驱动程序。
î 基于Web的Applet,它们不需要任何安装或软件配置。
î 安全的系统,这里数据库被保护在一个中间件后面。
î 灵活的解决方案,如果使用许多不同的数据库产品。
î 客户要求较小的驱动程序。
Java到本地数据库协议
它是纯Java的,通过自己的本地协议直接与数据库引擎进行通讯。通过本地的通讯协议,它具备在Internet上装配的能力。与其他类型的驱动程序相比,这一类驱动程序的优点在于它的性能。以下情况可以考虑使用Java到本地数据库协议。
î 严格要求高性能。
î 只使用一种数据库产品的环境。
î 基于Web的Applet,取决于这种驱动程序的能力。
由于存在对数据库的多种需求,所以有4种类型的JDBC驱动程序,如何选择这4类驱动程序取决于具体情况。不过关于选择哪一类驱动程序的确有一些混乱。比如Java到本地数据库协议的驱动程序不会因为它具有最大的类型号而比其他3种更好。只有实际中特定的需求才能决定应该使用哪种类型的JDBC驱动程序。
二、异常错误及解决方案:
1,jdbc-odbc连接驱动的安全限制
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载 jdbc-odbc桥驱动程序
当用main() 方法调用时,程序编译、运行正常
当由Applet小程序调用时抛出以下异常:
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.jdbc.odbc)
原因:JdbcOdbc桥驱动认为未经签名的Applet是不可靠的
解决方法:①对Apllet进行数字签名,以通过JdbcOdbc安全检查
②采用JDBC Type3或Type4驱动,该两种驱动忽略Applet的安全检查
Type4:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
2,数据库连接失败
con =
DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=TourSysDB;user=sa;password=cdm");
说明:user与password均指数据库的名字和密码
若抛出异常如下:
com.microsoft.sqlserver.jdbc.SQLServerException: 到主机的TCP/IP 连接失败。 java.net.ConnectException: Connection refused: connect
原因:①数据库网络实用工具中没有添加TCP/IP协议或添加协议后没有设置默认端口1433
②数据库版本太低
解决方法:
①进入数据库网络实用工具中添加TCP/IP协议和管道协议、并设置属性的默认端口1433,然后停止SQL Serve 服务器后再重起
若此时仍抛出 :到主机的TCP/IP 连接失败的异常,则查看1433端口是否被监听
telnet 172.25.5.227 1433
如果提示:
正在连接到127.0.0.1...不能打开到主机的连接,在端口 1433: 连接失败
就必须打补丁解决问题。
或者:netstat –an查看1433 是否被监听
②确定已安装的 SQL Server 2000 Database Components 版本
使用 isql、osql 或查询分析器,对数据库引擎实例执行以下查询之一。
SELECT SERVERPROPERTY('ProductLevel')
SELECT @@VERSION
SELECT SERVERPROPERTY('ProductVersion')
1. 说明 如果在安装产品之后或安装以前的 Service Pack 之后应用了热修复程序,您的产品版本与上述值可能会有所不同。例如,在对 SQL Server 2000 SP
3a
应用了安全修复程序 MS03-031 之后,@@VERSION
返回值 8.00.818。
- (可选)如果无法确定正在运行的版本是 SQL Server 2000 数据库引擎还是 MSDE 2000,请使用 isql、osql 或查询分析器对不确定的实例执行以下查询。
SELECT SERVERPROPERTY('Edition')
如果该查询返回“desktop engine”,则说明您正在运行 MSDE 2000 实例;否则,您正在运行 SQL Server 2000 数据库引擎实例。