首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

JDBC 直連 SQL Server:Microsoft JDBC Driver 設定與連線範例

     編輯:關於SqlServer

驅動程式演進

世代套件名稱驅動類別狀態
第一代 (舊)Microsoft JDBC Driver 2000/2005com.microsoft.jdbc.sqlserver.SQLServerDriver已停止維護
第二代SQL Server 2005 JDBC Driver 1.xcom.microsoft.sqlserver.jdbc.SQLServerDriver舊版相容
現代 (推薦)Microsoft JDBC Driver for SQL Server (mssql-jdbc)com.microsoft.sqlserver.jdbc.SQLServerDriver持續更新、支援 JDBC 4.3+、Azure AD、Always Encrypted

Maven/Gradle 相依性

<!-- Maven -->
<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>12.6.3.jre11</version> <!-- 依 JDK 版本選擇 jre8/jre11/jre17 -->
</dependency>

// Gradle
implementation "com.microsoft.sqlserver:mssql-jdbc:12.6.3.jre11"

連線字串格式

// 標準格式
jdbc:sqlserver://:;databaseName=;encrypt=true;trustServerCertificate=false;

// 常用參數
jdbc:sqlserver://192.168.1.100:1433;databaseName=MyDB;
    encrypt=true;trustServerCertificate=false;
    loginTimeout=30;socketTimeout=60;
    applicationName=MyApp;integratedSecurity=false;

關鍵參數: `encrypt=true` 強制 TLS(生產必開),`trustServerCertificate=false` 驗證伺服器憑證(需有效 CA 簽署)。開發環境可暫設 `trustServerCertificate=true`。

完整 Java 連線範例

import java.sql.*;

public class SqlServerJdbcDemo {
    public static void main(String[] args) {
        String url = "jdbc:sqlserver://localhost:1433;databaseName=TestDB;encrypt=true;trustServerCertificate=true;";
        String user = "app_user";
        String password = "StrongP@ssw0rd!";

        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            System.out.println("Connected: " + conn.getMetaData().getDatabaseProductVersion());

            // 參數化查詢
            String sql = "SELECT TOP 10 name, create_date FROM sys.tables WHERE type = 'U'";
            try (PreparedStatement stmt = conn.prepareStatement(sql);
                 ResultSet rs = stmt.executeQuery()) {
                while (rs.next()) {
                    System.out.printf("Table: %-30s Created: %s%n", rs.getString(1), rs.getTimestamp(2));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

進階功能支援

  • 資料表值參數 (TVP): `Structured` 型別傳遞集合給預存程序,效能優於 XML/字串拆解。
  • Always Encrypted: 用戶端驅動程式透明加密/解密敏感欄位,金鑰存於 Azure Key Vault / Windows 憑證存儲。
  • Azure Active Directory 驗證: `authentication=ActiveDirectoryPassword` / `ActiveDirectoryIntegrated` / `ActiveDirectoryServicePrincipal` / `ActiveDirectoryManagedIdentity`。
  • 連線池整合: 搭配 HikariCP (`dataSourceClassName=com.microsoft.sqlserver.jdbc.SQLServerDataSource`)。

常見問題排查

錯誤原因解決
The driver could not establish a secure connectionTLS 版本不符 / 憑證不信任JDK 升級至 8u161+;檢查伺服器憑證鏈;開發環境暫用 trustServerCertificate=true
Login failed for user帳號/密碼錯誤、未授權資料庫、SQL 驗證未啟用SSMS 確認登入、對應使用者、伺服器驗證模式
Connection reset防火牆、SQL Server 未啟用 TCP/IP、埠號錯誤SQL Server Configuration Manager 啟用 TCP/IP、確認 1433/動態埠
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved