SQL Server 2012 引入了新的 JDBC 驅動程式版本,支援 JDBC 4.0 規格與新功能(如 AlwaysOn、ColumnStore 索引等)。本文將說明如何在 Java 專案中正確配置 Microsoft JDBC Driver for SQL Server,並提供連線範例與常見問題解決方案。
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>12.2.0.jre11</version> <!-- 依 JDK 版本選擇 jre8/jre11/jre17 -->
</dependency>
最新版本請參考 Microsoft JDBC Driver for SQL Server GitHub。
sqljdbc__enu.tar.gz 或 .zip。mssql-jdbc-.jar ,加入專案類別路徑。jdbc:sqlserver://localhost:1433;databaseName=YourDB;user=sa;password=YourPass;encrypt=true;trustServerCertificate=true;
jdbc:sqlserver://localhost;instanceName=SQLEXPRESS;databaseName=YourDB;user=sa;password=YourPass;encrypt=true;trustServerCertificate=true;
jdbc:sqlserver://localhost:1433;databaseName=YourDB;integratedSecurity=true;encrypt=true;trustServerCertificate=true;
需將 sqljdbc_auth.dll(x64/x86 依 JVM 位元數)放入 java.library.path 指定目錄。
encrypt=true:SQL Server 2012+ 預設要求加密連線。trustServerCertificate=true:開發/測試環境可略過憑證驗證;生產環境建議設為 false 並部署有效憑證。loginTimeout、socketTimeout:可依需求設定連線/讀取逾時(毫秒)。import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class SqlServerJdbcDemo {
public static void main(String[] args) {
String url = "jdbc:sqlserver://192.168.1.100:1433;"
+ "databaseName=TestDB;"
+ "user=app_user;"
+ "password=P@ssw0rd;"
+ "encrypt=true;"
+ "trustServerCertificate=true;";
try (Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT @@VERSION AS version")) {
if (rs.next()) {
System.out.println("連線成功,SQL Server 版本:" + rs.getString("version"));
}
} catch (Exception e) {
System.err.println("連線失敗:" + e.getMessage());
e.printStackTrace();
}
}
}
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:sqlserver://192.168.1.100:1433;databaseName=TestDB;encrypt=true;trustServerCertificate=true;");
config.setUsername("app_user");
config.setPassword("P@ssw0rd");
config.setMaximumPoolSize(20);
config.setMinimumIdle(5);
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
HikariDataSource ds = new HikariDataSource(config);
| 錯誤訊息 | 可能原因 | 解決方式 |
|---|---|---|
| The TCP/IP connection to the host has failed | IP/連接埠錯誤、防火牆阻擋、TCP/IP 未啟用 | 檢查 IP、連接埠、防火牆、SQL Server Configuration Manager |
| Login failed for user 'sa' | 密碼錯誤、帳號停用、驗證模式非混合模式 | 重設密碼、啟用帳號、SSMS 改為 SQL Server 和 Windows 驗證模式 |
| The driver could not establish a secure connection | 憑證不受信任、JDK 版本不支援 TLS 1.2 | 設定 trustServerCertificate=true 或部署有效憑證;升級 JDK 至 8u161+ |
| No suitable driver found | JDBC 驅動未載入、類別路徑遺漏 | 確認 Maven 依賴或 JAR 已加入 classpath |
queryTimeout 避免資源耗盡。掌握上述設定與範例,即可在 Java 應用程式中穩定、高效地連接 SQL Server 2012 資料庫。