許多遷移專案因驅動類別名稱與 URL 格式未更新而失敗,請務必對照下表:
| 項目 | SQL Server 2000 | SQL Server 2005 |
|---|---|---|
| Driver Class | com.microsoft.jdbc.sqlserver.SQLServerDriver | com.microsoft.sqlserver.jdbc.SQLServerDriver |
| JDBC URL | jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sample | jdbc:sqlserver://localhost:1433;DatabaseName=sample |
⚠️ 注意:2005 版去掉了microsoft:前綴,包名也從jdbc.sqlserver改為sqlserver.jdbc。若專案同時支援兩版,建議用條件判斷或工廠模式動態載入。
SQL Server Management Studio → 右鍵伺服器屬性 → 連線 → 勾選 允許遠端連線至此伺服器。

SQL Server 組態管理員 → SQL Server 2005 網路組態 → MSSQLSERVER 的通訊協定 → TCP/IP → 右鍵啟用。

TCP/IP 屬性 → IP 位址 分頁 → IPAll 區段 → TCP 通訊埠 填 1433,清空 TCP 動態通訊埠。

💡 修改後必須重啟 SQL Server 服務才生效。
import java.sql.*;
public class SqlServer2005Conn {
public static void main(String[] args) {
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url = "jdbc:sqlserver://192.168.1.100:1433;DatabaseName=MyDB";
String user = "sa";
String pwd = "yourStrongPassword";
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, pwd);
System.out.println("✅ 連線成功!Catalog: " + conn.getCatalog());
// 簡單測試查詢
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT @@VERSION");
if (rs.next()) System.out.println("版本資訊: " + rs.getString(1));
rs.close(); stmt.close(); conn.close();
} catch (Exception e) {
System.err.println("❌ 連線失敗: " + e.getMessage());
e.printStackTrace();
}
}
}
| 錯誤現象 | 可能原因 | 解決方案 |
|---|---|---|
ClassNotFoundException | 未引入 sqljdbc.jar 或 mssql-jdbc.jar | Maven: com.microsoft.sqlserver:mssql-jdbc:12.4.1.jre11 |
Connection refused | 防火牆攔截、TCP/IP 未啟用、Port 錯誤 | 檢查 1433 通訊埠、防火牆規則、SQL 組態管理員 |
Login failed for user | 帳號/密碼錯誤、SQL Server 驗證模式為 Windows Only | SSMS → 伺服器屬性 → 安全性 → 選「SQL Server 和 Windows 驗證模式」→ 重啟服務 |
The TCP/IP connection to the host has failed | 主機名稱解析失敗、實例名稱錯誤 | 用 IP 直連;若為具名實例 URL 加 ;instanceName=INST |
PreparedStatement,防 SQL 注入並利用執行計畫快取。mssql-jdbc 驅動,支援 JDBC 4.2+、SSL 加密、Always Encrypted 等新特性。