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

Code

/**//*
* 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方式也可以实现:
代码如下:

Code

/**//*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package testsqlconn;

import java.sql.*;


/** *//**
*
* @author: Administrator:downmoon(3w@live.cn)
* @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,简单多了:

Code

/**//*
* 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();
}
}
}

调用:

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

小结:java的jdbc集成windows方式连接共有两种方式:data source object和URL方式,分别见第一种和第二种。
如果有任何问题,请联系邀月。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2008-09-23 Windows PowerShell 编写正则表达式(转自TechNet Magazine)