com.microsoft.sqlserver:mssql-jdbc:12.4.1.jre11(現代版本,支持 2008+、Java 8+)。sqljdbc_1.1.1501.101_chs.exe 僅用於維護 SQL 2000/2005 老項目。java -cp ".;path/to/mssql-jdbc-12.4.1.jre11.jar" MyApp| 版本 | 驅動類名 | URL 格式 |
|---|---|---|
| SQL Server 2000 (舊驅動) | com.microsoft.jdbc.sqlserver.SQLServerDriver | jdbc:microsoft:sqlserver://host:1433;DatabaseName=db |
| SQL Server 2005+ (新驅動) | com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://host:1433;DatabaseName=db |
⚠️ 寫錯驅動類或 URL 前綴會導致 ClassNotFoundException 或 No suitable driver。
import java.sql.*;
public class SqlServerConnTest {
public static void main(String[] args) {
String url = "jdbc:sqlserver://localhost:1433;DatabaseName=TestDB;encrypt=true;trustServerCertificate=true;";
String user = "sa";
String pwd = "YourStrongPassword";
try (Connection conn = DriverManager.getConnection(url, user, pwd)) {
System.out.println("連接成功!版本: " + conn.getMetaData().getDatabaseProductVersion());
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT @@VERSION")) {
if (rs.next()) System.out.println(rs.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
| 錯誤 | 原因 | 解決 |
|---|---|---|
| Connection refused | TCP/IP 未啟用/防火牆/端口錯誤 | 配置管理器啟用 TCP/IP、開放 1433、檢查 IPAll 端口 |
| Login failed for user | 混合模式未啟用/密碼錯誤/賬號鎖定 | SSMS→屬性→安全性→混合模式、重置密碼 |
| The TCP/IP connection has failed | 實例名/端口/瀏覽器服務 | 命名實例用 host\\instance 或指定端口、啟用 Browser 服務 |
| SSL/TLS handshake failed | 驅動默認加密、憑證不信任 | URL 加 encrypt=true;trustServerCertificate=true (開發/測試) |
使用 HikariCP:
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:sqlserver://localhost:1433;DatabaseName=TestDB");
config.setUsername("app_user");
config.setPassword("pwd");
config.setMaximumPoolSize(20);
config.setMinimumIdle(5);
config.setConnectionTimeout(30000);
config.setIdleTimeout(600000);
config.setMaxLifetime(1800000);
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
DataSource ds = new HikariDataSource(config);