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

Java 連接 SQL Server 常見錯誤與驅動版本對應完整指南

     編輯:Java 相關知識

Java 連接 SQL Server 時,驅動類別名、連線字串格式、JAR 依賴隨版本差異極大,且網路協定(TCP/IP、Named Pipes)配置錯誤頻繁導致連線失敗。本文彙整 SQL Server 2000/2005/2008+ 至最新版的驅動對應表、連線字串範本、TCP/IP 啟用步驟與常見異常排查清單。

核心錯誤:TCP/IP 連線被拒絕


The TCP/IP connection to the host localhost, port 1433 has failed.
Error: Connection refused: connect

根因:SQL Server 預設**未啟用 TCP/IP 協定**,或防火牆阻擋埠口。

解決步驟:

  1. 開啟 SQL Server Configuration Manager。
  2. 展開 SQL Server Network Configuration → 選取對應執行個體(如 Protocols for MSSQLSERVER)。
  3. 右鍵 TCP/IP → Enable。
  4. 雙擊 TCP/IP → IP Addresses 分頁 → 找到 IPAll 或對應 IP → 設定 TCP Port = 1433(或自訂埠),清空 TCP Dynamic Ports。
  5. 重啟 SQL Server 服務(SQL Server (MSSQLSERVER))。
  6. Windows 防火牆新增輸入規則允許 TCP 1433(或自訂埠)。

驅動版本與連線字串對應表

SQL Server 版本驅動類別名連線字串範本必要 JAR
SQL Server 2000sun.jdbc.odbc.JdbcOdbcDriver(JDBC-ODBC Bridge,Java 8 移除)jdbc:odbc:<DSN名>mssqlserver.jar, msutil.jar, msbase.jar (Microsoft JDBC 2000 版)
SQL Server 2005com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://<host>:1433;DatabaseName=<db>sqljdbc.jar (Microsoft JDBC Driver 1.2 for SQL Server 2005)
SQL Server 2008/2008 R2com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://<host>:1433;DatabaseName=<db>sqljdbc4.jar (JDBC 3.0, Java 6+)
SQL Server 2012/2014/2016/2017/2019/2022com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://<host>:1433;DatabaseName=<db>;encrypt=true;trustServerCertificate=truemssql-jdbc-12.x.x.jre11.jar (最新 Microsoft JDBC Driver 12.x, Java 8/11/17)

現代化連線範例(JDBC 12.x + Java 17 + SQL Server 2019+)


String url = "jdbc:sqlserver://192.168.1.100:1433;" +
             "databaseName=MyDB;" +
             "encrypt=true;" +
             "trustServerCertificate=true;" +  // 測試環境自簽憑證用;生產請配置信任憑證
             "loginTimeout=30;" +
             "socketTimeout=30;";

String user = "app_user";
String password = "strongPassword";

try (Connection conn = DriverManager.getConnection(url, user, password)) {
    // 連線成功
    System.out.println("連線成功: " + conn.getMetaData().getDatabaseProductVersion());
} catch (SQLException e) {
    // 統一錯誤處理
    throw new RuntimeException("資料庫連線失敗", e);
}

Maven 依賴(最新穩定版)


<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>12.4.2.jre11</version> <!-- 對應 Java 11/17 -->
</dependency>

常見異常與排查清單

異常訊息原因解決
No suitable driver found驅動類別名錯誤/JAR 未在 classpath檢查 Class.forName、Maven 依賴、Fat JAR 合併策略
Login failed for user帳號/密碼錯誤/權限不足確認 SQL Server 驗證模式、使用者對應資料庫權限
The driver could not establish a secure connectionencrypt=true 但憑證不受信生產環境匯入 CA 憑證;測試環境加 trustServerCertificate=true
Connection reset網路中斷/防火牆/Idle timeout檢查防火牆、設定 socketTimeout、啟用連線池驗證查詢
Java 8/11/17 版本不相容JDBC 驅動 JRE 版本與執行環境不符選擇對應 jre8/jre11/jre17 後綴的 JAR

最佳實踐建議

  1. **使用連線池**:HikariCP(預設 Spring Boot)、Druid、DBCP2,避免頻繁建立/關閉連線。
  2. **參數化查詢**:PreparedStatement 防 SQL 注入、執行計畫重用。
  3. **關閉自動提交**:批次操作時 conn.setAutoCommit(false) 手動控制事務。
  4. **驗證查詢**:連線池配置 validationQuery=SELECT 1 防止斷連。
  5. **加密連線**:生產環境強制 encrypt=true 並配置信任憑證。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved