首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

JTDS 驅動連接 SQL Server 完整指南:環境配置、代碼範例與常見坑點

     編輯:Java 程式設計入門

連接 Microsoft SQL Server 是 Java 企業級開發的高頻需求。開源 jTDS 驅動以效能優異、規格完整、無原生庫依賴著稱,是 JDBC 連接 SQL Server 的首選方案。本文涵蓋環境變量配置、Maven/Gradle 依賴、連接代碼範例、Windows/SQL 混合認證切換、常見異常排查。

環境配置三步走

1. 獲取驅動 JAR

2. 依賴管理 (推薦)



    net.sourceforge.jtds
    jtds
    1.3.1



implementation 'net.sourceforge.jtds:jtds:1.3.1'

不要 手動拷貝到 JDK_HOME/jre/lib/ext 或修改系統 CLASSPATH 環境變量 —— 這是反模式,導致版本衝突、部署困難、IDE 識別失敗。

3. SQL Server 端配置:啟用 TCP/IP 與混合認證

  1. SQL Server Configuration Manager → SQL Server Network Configuration → Protocols for MSSQLSERVER → Enable TCP/IP
  2. TCP/IP Properties → IP Addresses → IPAll → TCP Port = 1433
  3. SSMS 連接實例 → 右鍵 Properties → Security → SQL Server and Windows Authentication mode
  4. 重啟 SQL Server 服務

註冊表備選方案 (不推薦,僅作了解):HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.x\MSSQLServer\LoginMode = 2 (混合模式)。

標準連接代碼範例

import java.sql.*;

public class SqlServerConnect {
    public static void main(String[] args) {
        // 1. 連接字串參數
        String host = "localhost";        // 或 192.168.1.100
        int port = 1433;                  // 預設埠
        String database = "YourDatabase"; // 目標資料庫
        String user = "sa";               // SQL 登入帳號
        String password = "yourPassword"; // 密碼
        
        // 2. JDBC URL (jTDS 格式)
        String url = String.format("jdbc:jtds:sqlserver://%s:%d/%s", host, port, database);
        // 可選參數:;instance=SQLEXPRESS;encrypt=true;trustServerCertificate=true
        
        String driver = "net.sourceforge.jtds.jdbc.Driver";
        
        Connection conn = null;
        try {
            // 3. 載入驅動 (JDBC 4.0+ 可省略,DriverManager 會自動發現 META-INF/services/java.sql.Driver)
            Class.forName(driver);
            
            // 4. 建立連接
            conn = DriverManager.getConnection(url, user, password);
            System.out.println("連接成功!Catalog: " + conn.getCatalog());
            
            // 5. 簡單驗證查詢
            try (Statement stmt = conn.createStatement();
                 ResultSet rs = stmt.executeQuery("SELECT @@VERSION")) {
                if (rs.next()) System.out.println("版本: " + rs.getString(1));
            }
        } catch (SQLException e) {
            printSQLException(e);
        } catch (ClassNotFoundException e) {
            System.err.println("驅動類未找到,請檢查依賴: " + e.getMessage());
        } finally {
            closeQuietly(conn);
        }
    }
    
    private static void printSQLException(SQLException e) {
        System.err.println("SQLState: " + e.getSQLState());
        System.err.println("Error Code: " + e.getErrorCode());
        System.err.println("Message: " + e.getMessage());
        Throwable t = e.getCause();
        while (t != null) {
            System.err.println("Cause: " + t.getMessage());
            t = t.getCause();
        }
    }
    
    private static void closeQuietly(AutoCloseable c) {
        if (c != null) try { c.close(); } catch (Exception ignored) {}
    }
}

認證模式對比

模式連接字串適用場景
SQL Server Authenticationjdbc:jtds:sqlserver://host:1433/db;user=sa;password=xxx標準、跨網域、應用池身份、Docker 容器
Windows Authentication (NTLM)jdbc:jtds:sqlserver://host:1433/db;domain=YOUR_DOMAIN;useNTLMv2=true內網域環境、單一登入、服務帳號運行應用
Windows Authentication (Kerberos)jdbc:jtds:sqlserver://host:1433/db;useKerberos=true企業級 SSO、需 SPN 配置、Keytab

常見異常與解決方案

異常/現象原因解決
ClassNotFoundException: net.sourceforge.jtds.jdbc.Driver依賴未打包、Classpath 缺失Maven/Gradle 依賴、打包檢查 BOOT-INF/lib/jtds-*.jar
Network error IOException: Connection refusedSQL Server 未啟用 TCP/IP、埠錯誤、防火牆攔截Configuration Manager 啟用 TCP/IP、確認 1433、telnet 測試
Login failed for user 'sa'密碼錯誤、帳號鎖定、未啟用 SQL 認證SSMS 重置密碼、啟用混合模式、檢查鎖定狀態
I/O Error: DB server closed connection驅動版本過舊不支援 TLS 1.2、Server 強制加密升級 jTDS 1.3.1+、或 URL 加 ;encrypt=true;trustServerCertificate=true
Instance not found連接命名實例 (SQLEXPRESS) 未指定 instance 參數URL 加 ;instance=SQLEXPRESS 或使用實例埠

生產環境最佳實踐

  • 連線池:HikariCP + jTDS,配置 maximumPoolSize、connectionTimeout、idleTimeout
  • 參數化查詢:PreparedStatement 防注入、計劃複用
  • 事務邊界:@Transactional (Spring) 或 Connection.setAutoCommit(false)
  • 監控指標:連線池使用率、查詢延遲 P99、死鎖計數、錯誤率
  • 驅動升級:關注 jTDS 安全補丁,或評估 Microsoft 官方驅動 mssql-jdbc (支援 Always Encrypted、Data Classification 等新特性)

總結

jTDS 以純 Java、高效能、標準相容成為連接 SQL Server 的經典選擇。核心成功要素:Maven 依賴管理、SQL Server TCP/IP 啟用、認證模式匹配、異常信息完整記錄。現代架構中,配合 HikariCP 連線池、Spring 事務管理、遷移至 Microsoft 官方驅動以支援新特性,構建穩健的資料存取層。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved