msbase.jar、mssqlserver.jar、msutil.jar 三個 JAR。CLASSPATH 環境變數、或應用伺服器 lib 目錄。
import java.sql.*;
public class SqlServer2000Connect {
public static void main(String[] args) {
String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
String user = "sa";
String pwd = "";
try {
Class.forName(driver); // 載入驅動
Connection conn = DriverManager.getConnection(url, user, pwd);
System.out.println("連線成功!");
// 簡單測試查詢
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT @@VERSION")) {
if (rs.next()) System.out.println("版本: " + rs.getString(1));
}
} catch (ClassNotFoundException e) {
System.err.println("驅動類別找不到:檢查 JAR 是否在 classpath");
e.printStackTrace();
} catch (SQLException e) {
System.err.println("連線失敗:" + e.getMessage());
e.printStackTrace();
}
}
}
| 片段 | 說明 |
|---|---|
jdbc:microsoft:sqlserver: | Microsoft JDBC 驅動協定前綴 |
//localhost:1433 | 主機名/IP + 埠號(預設 1433) |
;DatabaseName=pubs | 分號分隔屬性,指定資料庫名稱 |
;SelectMethod=cursor | 游標模式,避免大結果集記憶體溢位 |
;sendStringParametersAsUnicode=false | 提升中文參數效能 |
| 錯誤現象 | 可能原因 | 解決方法 |
|---|---|---|
ClassNotFoundException | 驅動 JAR 不在 classpath | 確認三個 JAR 全部加入;IDE 專案右鍵 Build Path → Add External JARs |
Error establishing socket | SQL Server 未啟用 TCP/IP、防火牆阻擋、版本不匹配 | 1. SQL Server 組態管理器啟用 TCP/IP 協定 2. 防火牆開放 1433 埠 3. 安裝 SQL Server 2000 SP4 + JDBC SP3 |
Login failed for user 'sa' | 密碼錯誤、sa 帳號鎖定、混合驗證模式未啟用 | 企業管理器 → 安全性 → 登入 → sa → 重設密碼/解鎖;伺服器屬性 → 安全性 → SQL Server 和 Windows 驗證模式 |
| 中文亂碼 | 字元編碼不一致 | 連接字串加 sendStringParametersAsUnicode=false;資料庫欄位用 nvarchar;JVM -Dfile.encoding=UTF-8 |
| 連線洩漏/耗盡 | 未關閉 Connection/Statement/ResultSet | 全部使用 try-with-resources;或連線池(HikariCP、DBCP2) |
SQL Server 2000 已於 2013 年停止支援,生產環境強烈建議升級至 SQL Server 2019/2022。
驅動升級為 Microsoft JDBC Driver for SQL Server (mssql-jdbc):<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>12.6.1.jre11</version> </dependency>新驅動類別:
com.microsoft.sqlserver.jdbc.SQLServerDriver
新連接字串:jdbc:sqlserver://localhost:1433;databaseName=pubs;encrypt=true;trustServerCertificate=true
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:sqlserver://localhost:1433;databaseName=pubs;encrypt=true;trustServerCertificate=true");
config.setUsername("sa");
config.setPassword("yourStrongPassword");
config.setMaximumPoolSize(20);
config.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
HikariDataSource ds = new HikariDataSource(config);
// 使用 ds.getConnection() 獲取連線,自動管理生命週期