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

JDBC 連線 SQL Server 完整配置指南:驅動安裝、資料庫設定與測試代碼

     編輯:Java 相關知識

環境準備清單

  • JDK:1.6+(Microsoft JDBC 4.0+ 需 JDK 6 以上)
  • SQL Server:2008 R2 / 2012 / 2014 / 2016 / 2019(啟用 TCP/IP)
  • JDBC 驅動:sqljdbc4.jar 或 mssql-jdbc-.jar

步驟 1:下載並安裝 JDBC 驅動

  1. 官方下載:Microsoft JDBC Driver for SQL Server
  2. 解壓,取得 sqljdbc4.jar(JDK 6/7/8)或 mssql-jdbc-12.x.jre11.jar(JDK 11+)。
  3. 放入專案 classpath:
    • Maven:com.microsoft.sqlserver:mssql-jdbc:12.4.1.jre11
    • Gradle:implementation 'com.microsoft.sqlserver:mssql-jdbc:12.4.1.jre11'
    • 手動:專案 lib/ 目錄 → Build Path → Add JARs

步驟 2: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 → TCP Port 設為 1433(預設)
  5. 重啟 SQL Server 服務

步驟 3:建立 SQL Server 驗證登入

-- 使用 SSMS 以 Windows 驗證登入,執行:
ALTER LOGIN sa ENABLE;
ALTER LOGIN sa WITH PASSWORD = 'YourStrongPassword123';
-- 或建立新登入
CREATE LOGIN dev_user WITH PASSWORD = 'DevPass123';
GRANT CONNECT SQL TO dev_user;
-- 指定資料庫權限
USE YourDatabase;
CREATE USER dev_user FOR LOGIN dev_user;
EXEC sp_addrolemember 'db_owner', 'dev_user';

步驟 4:JDBC 連線字串格式

// 基本格式(SQL Server 2005+)
jdbc:sqlserver://localhost:1433;databaseName=YourDatabase;encrypt=true;trustServerCertificate=true

// 命名實例
jdbc:sqlserver://localhost:1433;instanceName=SQLEXPRESS;databaseName=YourDB

// 整合驗證(Windows 域環境)
jdbc:sqlserver://localhost:1433;databaseName=YourDB;integratedSecurity=true

參數說明:

  • encrypt=true:強制 TLS 加密(Azure SQL 必須)。
  • trustServerCertificate=true:開發環境信任自簽憑證,生產請設 false 並配置 CA。
  • loginTimeout、socketTimeout:建議顯式設定(秒)。

步驟 5:完整測試代碼

package com.example.jdbc;

import java.sql.*;

public class SqlServerJdbcTest {

    public static void main(String[] args) {
        String url = "jdbc:sqlserver://localhost:1433;databaseName=TestDB;encrypt=true;trustServerCertificate=true";
        String user = "dev_user";
        String password = "DevPass123";

        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            System.out.println("✅ 連線成功!");

            // 測試查詢
            String sql = "SELECT TOP 5 name, create_date FROM sys.tables";
            try (PreparedStatement ps = conn.prepareStatement(sql);
                 ResultSet rs = ps.executeQuery()) {

                while (rs.next()) {
                    System.out.printf("Table: %-30s Created: %s%n",
                        rs.getString("name"), rs.getTimestamp("create_date"));
                }
            }

            // 測試更新
            String dml = "INSERT INTO demo_log (msg) VALUES (?)";
            try (PreparedStatement ps = conn.prepareStatement(dml, Statement.RETURN_GENERATED_KEYS)) {
                ps.setString(1, "JDBC test " + System.currentTimeMillis());
                int rows = ps.executeUpdate();
                System.out.println("插入行數: " + rows);
                try (ResultSet keys = ps.getGeneratedKeys()) {
                    if (keys.next()) System.out.println("自增 ID: " + keys.getLong(1));
                }
            }

        } catch (SQLException e) {
            System.err.println("❌ 連線失敗: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

常見錯誤與解決

錯誤原因解決
No suitable driverJAR 未在 classpath / 版本不匹配 JDK確認 Maven 依賴或 Build Path 包含正確 JAR
Connection refusedTCP/IP 未啟用 / 防火牆阻擋 / 埠號錯誤Configuration Manager 啟用 TCP/IP、開放 1433 埠
Login failed for user帳號密碼錯 / SQL 驗證模式未啟用 / 帳號鎖定SSMS 檢查 Server Properties → Security → SQL Server and Windows Authentication mode
The driver could not establish a secure connectionTLS 版本不支援 / 憑證問題加 trustServerCertificate=true 或更新 JDK / 驅動版本
ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver驅動類名錯誤(舊版 com.microsoft.jdbc.sqlserver.SQLServerDriver)JDBC 4.0+ 統一用 com.microsoft.sqlserver.jdbc.SQLServerDriver

生產環境建議

  • 使用 HikariCP 連線池,配置 maximumPoolSize、connectionTimeout、idleTimeout。
  • 啟用 encrypt=true、配置有效憑證、關閉 trustServerCertificate。
  • 設定 applicationName 連線屬性,方便 DBA 追蹤。
  • 使用 try-with-resources 確保資源釋放。
  • 避免 SELECT *,明確列出欄位。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved