java中如何以windows集成方式连接SQL Server

本文介绍使用Java通过两种方法实现集成Windows身份验证连接SQL Server:一是通过DataSource对象,二是通过URL方式,并解决了sqljdbc_auth.dll缺失的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在《JDBC Driver For SQL2000/2005/2008 》一文中,邀月介绍了如何下载并使用jdbc连接SQL Server,
今天有人问起,如何以windows集成方式连接SQL Server,这个以前真没试过。
于是,打开netBeans测试了一下,代码如下:

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package testsqlconn; import java.sql.*; import com.microsoft.sqlserver.jdbc.*; /** *//** * * @author: Administrator:downmoon(3w@live.cn) * @date:2009-9-23 18:42:32 * @Encoding:UTF-8 * @File:TestSqlbyDS/TestSqlbyDS.java * @Package:testsqlconn */ public class TestSqlbyDS { public TestSqlbyDS(){} public void GetResutls() { // Declare the JDBC objects. Connection con = null; CallableStatement cstmt = null; ResultSet rs = null; try { // Establish the connection. SQLServerDataSource ds = new SQLServerDataSource(); ds.setIntegratedSecurity(true); ds.setServerName("ap4//agronet08");//数据库实例名 ds.setPortNumber(1433); ds.setDatabaseName("AdventureWorksLT2008");//Database Name con = ds.getConnection(); // Execute a SQL that returns some data. //cstmt = con.prepareCall("{call dbo.uspGetEmployeeManagers(?)}"); //cstmt.setInt(1,50); cstmt = con.prepareCall(" select top 10 * from [SalesLT].[Product] ");//Sql rs = cstmt.executeQuery(); // Iterate through the data in the result set and display it. while (rs.next()) { System.out.println("Product: " + rs.getString("Name") + ", " + rs.getString("ProductNumber")); System.out.println("ListPrice: " + rs.getString("ListPrice")); System.out.println(); } } // Handle any errors that may have occurred. catch (Exception e) { e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); } catch (Exception e) { } } if (cstmt != null) { try { cstmt.close(); } catch (Exception e) { } } if (con != null) { try { con.close(); } catch (Exception e) { } } } } }

结果提示:找不到sqljdbc_auth.dll, 到下载的压缩包里看了下: auth/x86,auth/x64/,auth/IA64下都有该文件,直接复制auth/x86/sqljdbc_auth.dll到
E:/Java/jdkUpdate/jre/lib/ext/下,这是本机的jre路径。
然后运行。成功!
后来再试了下,发现直接用URL方式也可以实现:
代码如下:

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package testsqlconn; import java.sql.*; /** *//** * * @author: <a title="邀月工作室" href="http://blog.youkuaiyun.com/downmoon/" mce_href="http://blog.youkuaiyun.com/downmoon/" >欢迎与邀月交流,net技术与软件架构</a> * @date:2009-9-23 18:42:32 * @Encoding:UTF-8 * @File:TestSqlByURL/TestSqlByURL.java * @Package:testsqlconn */ public class TestSqlByURL { public TestSqlByURL() { } public void GetResults() { // Create a variable for the connection string. String connectionUrl = "jdbc:sqlserver://ap4//agronet08:1433;databaseName=AdventureWorksLT2008;integratedSecurity=true;"; // Declare the JDBC objects. Connection con = null; Statement stmt = null; ResultSet rs = null; try { // Establish the connection. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); con = DriverManager.getConnection(connectionUrl); // Create and execute an SQL statement that returns some data. String SQL = "SELECT TOP 10 * FROM [SalesLT].[Product]"; stmt = con.createStatement(); rs = stmt.executeQuery(SQL); // Iterate through the data in the result set and display it. while (rs.next()) { System.out.println(rs.getString(2) + " " + rs.getString(3)); } } // Handle any errors that may have occurred. catch (Exception e) { e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); } catch (Exception e) { } } if (stmt != null) { try { stmt.close(); } catch (Exception e) { } } if (con != null) { try { con.close(); } catch (Exception e) { } } } } }

如果是用户名加密码的URL方式,则不需要sqljdbc_auth.dll ,简单多了:

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package testsqlconn; import java.sql.*; import com.microsoft.sqlserver.jdbc.*; /** *//** * * @author: Administrator:downmoon(3w@live.cn) * @date:2009-9-23 18:42:32 * @Encoding:UTF-8 * @File:TestSqlUserPwdURL/TestSqlUserPwdURL.java * @Package:testsqlconn */ public class TestSqlUserPwdURL { public TestSqlUserPwdURL(){} public static void ShowProduct(String ip,String dbName,String user,String pwd,int port,String sql) { try { // ## DEFINE VARIABLES SECTION ## // define the driver to use String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; // the database name //String dbName = "AdventureWorksLT2008"; // define the Derby connection URL to use String connectionURL = "jdbc:sqlserver://"+ip+":"+port+";databaseName=" + dbName; // System.out.println(connectionURL); Connection conn = null; // Beginning of JDBC code sections // ## LOAD DRIVER SECTION ## Class.forName(driver); System.out.println(driver + " loaded. "); conn = DriverManager.getConnection(connectionURL, user, pwd); Statement s = conn.createStatement(); ResultSet rs = s.executeQuery(sql); while (rs.next()) { System.out.println("ID : " + rs.getInt(1)); System.out.println("Name : " + rs.getString(2)); System.out.println("Number: " + rs.getString(3)); System.out.println("Time: " + rs.getString(4)); System.out.println(); } rs.close(); s.close(); conn.close(); } catch (Exception e) { System.out.println("Exception: " + e); e.printStackTrace(); } } }

测试代码:

TestSqlUserPwdURL test3=new TestSqlUserPwdURL(); String sql="SELECT top 10 ProductID,[Name],ProductNumber,Modifieddate FROM [SalesLT].[Product] order by Modifieddate desc "; test3.ShowProduct("192.168.30.99//agronet08", "AdventureWorksLT2008", "sa", "sa", 1433, sql);


小结:java的jdbc集成windows方式连接共有两种方式:data source object和URL方式,分别见第一种和第二种。

如果有任何问题,请联系邀月。

助人等于自助! 3w@live.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值