Java连接SQL Server数据库的一个简单例子

演示在用java连接SQL Server数据库。用了一个简单的java程序作试验。

第一步:获得jdbc for SQL Server驱动程序
sqljdbc.jarsqljdbc4.jar   sqljdbc_auth.dll

为了支持向后兼容以及可能的升级方案,JDBC Driver 2.0 在每个安装包中都包括 2 个 JAR 类库:sqljdbc.jarsqljdbc4.jar

JAR 说明

sqljdbc.jar

sqljdbc.jar 类库提供对 JDBC 3.0 的支持。

sqljdbc.jar 类库要求使用 5.0 版的 Java 运行时环境 (JRE)。连接到数据库时,在 JRE 6.0 上使用 sqljdbc.jar 会引发异常。

注意: JDBC Driver 2.0 不支持 JRE 1.4。使用 JDBC Driver 2.0 时必须将 JRE 1.4 升级至 JRE 5.0 或更高版本。在某些情况下,您可能需要重新编译应用程序,因为它可能与 JDK 5.0 或更高版本不兼容。有关详细信息,请参阅 Sun Microsystems 网站上的文档。

 

sqljdbc4.jar

sqljdbc4.jar 类库提供对 JDBC 4.0 的支持。它不仅包括 sqljdbc.jar 的所有功能,还包括新增的 JDBC 4.0 方法。

sqljdbc4.jar 类库要求使用 6.0 或更高版本的 Java 运行时环境 (JRE)。在 JRE 1.4 或 5.0 上使用 sqljdbc4.jar 会引发异常。

注意: 如果应用程序必须在 JRE 6.0 上运行,即使该应用程序不使用 JDBC 4.0 功能,也应使用 sqljdbc4.jar

 

请注意,尽管驱动程序旨在与所有主要的 Sun 等效 Java 虚拟机一起工作并由这些虚拟机支持,但却是在 Sun JRE 5.0 或更高版本上进行测试的。

注意:JRE6的要选择sqljdbc4.jar

 

第二步:设置环境变量CLASSPATH

将下载下来的sqljdbc.jar或sqljdbc4.jar放到目录d:\shared\lib下。将环境变量CLASSPATH设置为:D:\shared\lib\sqljdbc.jar

set CLASSPATH=.;d:\shared\lib\sqljdbc.jar;  

(注意:第一个“.”,这个代表当前目录。)

 

第三步:编写一段简单的java程序。

下面的这段程序使用驱动sqljdbc.jar连接SQL Server 2005数据库,并提取master数据库中的用户表的ID和name两列信息。

SQL Server 2005服务器在本机,端口为1433。登录sa的密码为:secret

执行:select id,name,crdate from dbo.sysobjects where type='U'   这条语句返回当前数据库(这可在url中指定!)中的用户表的id和name列。

import java.sql.*;
import java.util.*;

public class Conn2SQLServer {
    public static void main(String[] args) {
        try {
            String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";     //加载JDBC驱动
            Class.forName(driverName).newInstance();
            String url = "jdbc:sqlserver://localhost:1433;DatabaseName=master";//连接本机SQLServer服务器的master库,端口为默认的1433
            String userName = "sa";     //登录账号
            String userPwd = "secret";     //密码
            Connection conn = DriverManager.getConnection(url, userName,userPwd);
           
            Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
            String sql = "select id,name,crdate from dbo.sysobjects where type='U'"; // 表
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                System.out.println("oject_id:"+rs.getString(1)+",oject_name:"+rs.getString(2)); // 取得第一列和第二列的值
            }
            rs.close();
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
        }
    }
}

将上面这段代码保存到:d:\demo\Conn2SQLServer.java

下载:Conn2SQLServer.java

 

第四步:编译java源文件为class文件

Java编译器javac.exe的版本为:1.5.0_15

javac.exe Conn2SQLServer.java

 

第五步:执行java程序连接SQLServer 2005数据库,并显示查询结果

java程序的版本也是:1.5.0_15

java Conn2SQLServer

d:\demo>%jre%\bin\java Conn2SQLServer
oject_id:117575457,oject_name:spt_fallback_db
oject_id:133575514,oject_name:spt_fallback_dev
oject_id:149575571,oject_name:spt_fallback_usg
oject_id:1099150961,oject_name:spt_monitor
oject_id:1115151018,oject_name:spt_values
oject_id:1147151132,oject_name:MSreplication_options

备注:

关于驱动程序的版本:

本例子中java编译器javac的版本为:1.5.0_15,所以使用的jdbc for sqlserver为:sqljdbc.jar。JRE6的话需要使用sqljdbc4.jar!

在java1.5.0_15环境下使用sqljdbc4.jar,报错:Bad version number in .class file

d:\demo>set CLASSPATH=.;d:\shared\lib\sqljdbc4.jar;
d:\demo>%jre%\bin\javac Conn2SQLServer.java
d:\demo>%jre%\bin\java Conn2SQLServer
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:164)
        at Conn2SQLServer.main(Conn2SQLServer.java:8)

 

关于不同驱动程序的连接串:

在SQL Server 2000中加载驱动和URL路径的语句是:
String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String dbURL = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=master";
而SQL Server 2005中加载驱动和url的语句则为:
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=master"; 
如果写法错误将会找不到驱动.

SQL Server的身份验证方式:

 指定的多个 SQL Server 实例

SQL Server 2000 和 SQL Server 2005 允许在每台服务器上安装多个数据库实例。每个实例都由一个专用名称所标识。若要连接到 SQL Server 的命名实例,可以使用命名实例的端口号(首选),也可将实例名指定为 JDBC URL 属性或 datasource 属性。如果未指定实例名属性或端口号属性,则会创建与默认实例的连接。如以下实例所示:
若要使用端口号,请执行下列操作:
jdbc:sqlserver://localhost:1433;integratedSecurity=true;<more properties as required>;
若要使用 JDBC URL 属性,请执行下列操作:
jdbc:sqlserver://localhost;instanceName=instance1;integratedSecurity=true;<more properties as required>;

转义连接 URL 中的值

由于包含特殊字符(如空格、分号和引号),所以必须转义连接 URL 值的某些部分。如果这些字符包含在大括号中,则 JDBC 驱动程序将支持对其进行转义。例如,{;} 将转义分号。转义的值可以包含特殊字符(特别是“=”、“;”、“[]”和空格),但不能包含大括号。应将必须进行转义且包含大括号的值添加到属性集中。注意: 大括号内的空白为常量,不能删除。

本机集成身份验证模式

JDBC 驱动程序支持通过 integratedSecurity 连接字符串属性在 Windows 操作系统上使用“类型 2”集成身份验证。若要使用集成身份验证,请将sqljdbc_auth.dll 文件复制到计算机中 Windows 系统路径下的 JDBC 驱动程序安装目录中。
sqljdbc_auth.dll 文件的安装位置如下:<安装目录>\sqljdbc_<版本>\<语言>\auth\
注意: 如果使用 32 位处理器,请使用 x86 文件夹中的 sqljdbc_auth.dll 文件。如果使用 64 位处理器,请使用 x64 文件夹中的 sqljdbc_auth.dll 文件。
也可以通过设置 java.libary.path 系统属性来指定 sqljdbc_auth.dll 的目录,例如,如果 JDBC 驱动程序安装在默认目录中,您可以在 Java 应用程序启动时使用以下虚拟机 (VM) 参数来指定 DLL 的位置:
-Djava.library.path=C:\Microsoft SQL Server 2005 JDBC Driver\sqljdbc_<version>\enu\auth\x86

注意要把Microsoft SQL Server JDBC Driver 2.0\sqljdbc_2.0\chs\auth\x86设到PATH中(32位机),不然会说sqljdbc_auth.dll找不到!

JDBC 驱动程序支持使用具有连接属性集和 serverName 连接字符串属性的 IPv6 地址。连接字符串不支持在 IPv6 地址中使用初始 serverName 值,如 jdbc:sqlserver://serverName。使用 serverName 的名称而不是原始 IPv6 地址将适用于连接中的所有情况。

使用 serverName 属性

jdbc:sqlserver://;serverName=3ffe:8311:eeee:f70f:0:5eae:10.203.31.9\\instance1;integratedSecurity=true;

使用属性集

Properties pro = new Properties();
pro.setProperty("serverName", "serverName=3ffe:8311:eeee:f70f:0:5eae:10.203.31.9\\instance1");
Connection con = DriverManager.getConnection("jdbc:sqlserver://;integratedSecurity=true;", pro);
 

参考:

JDBC for SQLSERVER2005的使用

XP上安装配置JDK,Tomcat,SqlServer2000和JDBC

MS Sql 2000中字段text为空时的bug解决办法:sqljdbc4.jar

  • 本文链接地址:http://www.dbainfo.net/java-connect-to-sqlserver-demo.htm
  • 本文为dbainfo个人原创,请在尊重作者劳动成果的前提下进行转载;
  • 转载务必注明原始出处 : Sybase数据库技术,数据库恢复专家
  • 对《Java连接SQL Server数据库的一个简单例子》有何疑问或见解,请在本文下方发表;
  • 对网站还有其他问题或建议,请提交在留言板,谢谢!
  • 目前还没有任何评论.
    :wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)