SQL Server 2008 安裝與 Java JDBC 連接實戰(zhàn):從環(huán)境搭建到排錯指南
1. 項目概述從零搭建一個可用的數據訪問層最近在整理一個遺留的老項目發(fā)現其核心數據存儲依然依賴 SQL Server 2008而應用層則是用 Java 寫的。為了后續(xù)的維護和可能的遷移驗證我需要在一臺干凈的機器上重新搭建這套環(huán)境。這聽起來像是個老掉牙的任務但實際操作下來從安裝到打通連接每一步都可能藏著“驚喜”。尤其是對于剛接觸這塊的開發(fā)者網上教程雖多但往往只講步驟不講背后的邏輯和踩坑后的應對。今天我就把這次完整的“考古”與“連通”過程記錄下來重點不僅是“怎么做”更是“為什么這么做”以及“出了問題怎么辦”。無論你是需要維護歷史系統(tǒng)的新手還是想系統(tǒng)了解 JDBC 連接原理的開發(fā)者這篇從安裝到測試的全程實錄應該都能給你提供直接的參考。2. 環(huán)境準備與 SQL Server 2008 安裝解析2.1 安裝介質選擇與系統(tǒng)兼容性考量首先面臨的是安裝包問題。SQL Server 2008 是一個已經結束擴展支持多年的產品官方渠道已不再提供直接下載。通過熱詞可以看到大家搜索的關鍵是“sql server 2008 r2下載地址”。這里需要明確一個概念SQL Server 2008 和 SQL Server 2008 R2 是兩個不同的版本R2 是后續(xù)的升級版修復了大量問題并增加了新功能。對于新項目絕對不推薦使用如此陳舊的版本。但對于我們這種維護場景必須和原環(huán)境保持一致。我的建議是如果條件允許盡量使用 SQL Server 2008 R2它的穩(wěn)定性和工具鏈相對更完善。獲取安裝鏡像的合法途徑通常是 MSDN 訂閱或者從軟件資產管理庫中尋找。安裝前務必確認操作系統(tǒng)兼容性。SQL Server 2008 R2 的最高官方支持是 Windows Server 2008 R2 和 Windows 7。在 Windows 10 或 Windows Server 2016 及更高版本上安裝可能會遇到兼容性問題但并非完全不可行只是需要更多的調整。注意在生產環(huán)境中部署已終止支持的產品存在巨大安全風險。此演練僅適用于測試、學習或特定遺留系統(tǒng)維護場景并請確保測試環(huán)境與網絡隔離。我本次演示的環(huán)境是 Windows 10 專業(yè)版這是一個典型的“非官方支持”環(huán)境遇到的問題和解決方法更具普適性。2.2 詳細安裝步驟與關鍵配置點啟動安裝中心后選擇“全新安裝或向現有安裝添加功能”。接下來是關鍵安裝程序支持規(guī)則檢查這里大概率會失敗提示“Windows PowerShell 2.0”或“.NET Framework 3.5”等問題。在 Win10 上.NET 3.5 需要手動開啟。打開“控制面板” - “程序” - “啟用或關閉 Windows 功能”勾選“.NET Framework 3.5 (包括 .NET 2.0 和 3.0)”Windows 會從 Windows Update 或安裝介質獲取文件。PowerShell 2.0 在 Win10 上默認存在如果報錯可以嘗試以管理員身份運行安裝程序。功能選擇對于純連接測試最少需要選擇“數據庫引擎服務”。為了管理方便我強烈建議同時勾選“管理工具-基本”和“管理工具-完整”這會安裝 SQL Server Management Studio (SSMS) 的舊版雖然老但管理 SQL 2008 最兼容??蛻舳斯ぞ?SDK 可選它包含了開發(fā)頭文件和庫。實例配置默認實例和命名實例如何選如果你的機器上沒有其他 SQL Server用默認實例MSSQLSERVER最簡單連接時只需寫服務器名或IP。如果已有就必須選命名實例比如 SQL2008連接時需要寫成服務器名\實例名。我選擇默認實例。服務器配置這里配置服務賬戶。一個關鍵的坑不要輕易使用“NT AUTHORITY\NETWORK SERVICE”作為 SQL Server 數據庫引擎的賬戶特別是在非服務器版 Windows 上可能會導致后續(xù)權限問題。穩(wěn)妥的做法是使用“NT AUTHORITY\SYSTEM”或者專門創(chuàng)建一個本地用戶。我選擇“NT AUTHORITY\SYSTEM”。數據庫引擎配置這是核心。身份驗證模式務必選擇“混合模式SQL Server 身份驗證和 Windows 身份驗證”純 Windows 身份驗證在跨機器、跨域的 Java 應用連接時非常麻煩。選擇混合模式后必須為內置的sa賬戶設置一個強密碼并牢記它。指定 SQL Server 管理員直接添加當前 Windows 用戶即可。安裝規(guī)則和準備安裝再次檢查通過后即可開始安裝。整個過程大約需要20-40分鐘取決于機器性能。安裝完成后打開 SQL Server Configuration Manager配置管理器。這是后續(xù)排障的入口。你需要確認兩件事在“SQL Server 服務”中確保“SQL Server (MSSQLSERVER)”處于“正在運行”狀態(tài)。在“SQL Server 網絡配置” - “MSSQLSERVER 的協(xié)議”中確保“TCP/IP”協(xié)議是“已啟用”狀態(tài)。這是 Java 通過 JDBC 連接最常用的協(xié)議。2.3 安裝后必要檢查與防火墻設置安裝成功只是第一步要讓外部包括本機的 Java 程序能訪問還需檢查TCP/IP 端口雙擊“TCP/IP”屬性在“IP 地址”選項卡中拉到最下面“IPAll”部分查看“TCP 動態(tài)端口”是否為空以及“TCP 端口”是否為 1433。1433 是 SQL Server 默認端口。如果動態(tài)端口有值則連接時需要使用該端口號。建議將“TCP 端口”明確設置為 1433并將“動態(tài)端口”清空以固定端口方便配置。Windows 防火墻必須為 SQL Server 的端口默認 1433添加入站規(guī)則。打開“高級安全 Windows 防火墻”。點擊“入站規(guī)則” - “新建規(guī)則”。選擇“端口”下一步選擇“TCP”并輸入“1433”或你設定的端口。后續(xù)步驟選擇“允許連接”并為規(guī)則起一個名字如“SQL Server 1433”。完成這些你的 SQL Server 2008 實例才算是真正在網絡上“可訪問”了。你可以嘗試在本機使用 SSMS用“Windows 身份驗證”或剛才設置的sa賬戶登錄創(chuàng)建一個測試數據庫比如TestDB和表為接下來的 JDBC 連接做準備。3. Java 環(huán)境與 JDBC 驅動準備3.1 JDK 安裝與環(huán)境變量配置Java 端相對簡單但細節(jié)決定成敗。從熱詞“java環(huán)境變量配置”、“java安裝教程及環(huán)境配置方法”可以看出這依然是新手的高頻問題。JDK 版本選擇SQL Server 2008 是個老家伙但它對 JDK 的兼容性其實不錯。官方 JDBC 驅動我們接下來要用支持較老的 JDK。為了避免不必要的兼容性問題我選擇 JDK 8 (LTS版本)它兼具穩(wěn)定性和廣泛的生態(tài)支持。從 Oracle 官網或 Adoptium 等渠道下載安裝包即可。環(huán)境變量配置這是關鍵步驟配置不對后面編譯運行都會報錯。JAVA_HOME新建系統(tǒng)變量變量值指向你的 JDK 安裝目錄例如C:\Program Files\Java\jdk1.8.0_381。注意是jdk目錄不是jre目錄。Path編輯系統(tǒng)變量Path在開頭添加%JAVA_HOME%\bin。這樣系統(tǒng)在任何位置都能識別java、javac等命令。驗證方法打開新的命令行窗口重要環(huán)境變量需要新終端生效輸入java -version和javac -version能正確顯示版本信息即配置成功。實操心得很多“java: 錯誤: 不支持發(fā)行版本 5”這類問題就是因為在 IDE如 VSCode、IntelliJ IDEA中項目或模塊的編譯級別被錯誤地設置為很老的版本如 5而你的 JDK 是 8 或 11。需要在 IDE 的項目設置中將 “Source/Binary compatibility” 或 “Language Level” 調整為與你 JDK 匹配的版本如 8。3.2 JDBC 驅動選擇、下載與引入這是連接 SQL Server 和 Java 的橋梁。熱詞里提到了“gbase jdbc 驅動包”那是另一個數據庫。我們這里必須使用 Microsoft 官方或開源的 JDBC 驅動。驅動類型與版本微軟官方提供了兩種主要的 JDBC 驅動Microsoft JDBC Driver for SQL Server (sqljdbc)老牌驅動穩(wěn)定但已停止新功能開發(fā)。Microsoft JDBC Driver for SQL Server (mssql-jdbc)新的開源驅動活躍維護推薦使用。它支持 SQL Server 2008 及更高版本。我選擇mssql-jdbc。訪問 Microsoft 官方 GitHub 或 Maven 倉庫下載最新的穩(wěn)定版 JAR 文件如mssql-jdbc-12.4.2.jre8.jar。注意文件名中的jre8表示它適用于 JRE 8。驅動引入方式方式一簡單測試將下載的 JAR 文件例如mssql-jdbc-12.4.2.jre8.jar放在你的項目目錄下比如lib文件夾。在編譯和運行時通過-cp(classpath) 參數指定它。方式二Maven 項目在pom.xml中添加依賴。這是現代 Java 項目最常用的方式。dependency groupIdcom.microsoft.sqlserver/groupId artifactIdmssql-jdbc/artifactId version12.4.2.jre8/version !-- 使用適合你JDK的版本 -- /dependency方式三IDE 管理在 IntelliJ IDEA 或 Eclipse 中你可以通過項目結構設置直接添加這個 JAR 文件到項目的庫中。對于本次連接測試為了清晰展示過程我將采用方式一通過命令行操作。4. JDBC 連接原理與核心代碼實現4.1 JDBC 連接字符串的構造藝術JDBC 連接的核心在于一個格式正確的連接字符串Connection URL。它告訴驅動“如何去連接哪個數據庫”。對于 SQL Server基本格式如下jdbc:sqlserver://[serverName[\instanceName]:[portNumber];propertyvalue[;propertyvalue]我們來拆解一個連接本地默認實例TestDB數據庫的示例String url jdbc:sqlserver://localhost:1433;databaseNameTestDB;encryptfalse;trustServerCertificatetrue;;jdbc:sqlserver://協(xié)議固定格式。localhost服務器地址。可以是 IP如192.168.1.100、計算機名或localhost本機。1433端口號。如果使用默認實例且未修改端口就是 1433。如果安裝時使用了動態(tài)端口或自定義端口這里必須修改。databaseNameTestDB連接后直接使用的數據庫。也可以不指定連接后再用USE語句切換。encryptfalse對于測試環(huán)境或內網可以關閉加密以提高性能。生產環(huán)境必須設為true。trustServerCertificatetrue當encrypttrue但使用自簽名證書時需要此選項來信任服務器證書。測試環(huán)境常用。如果連接的是命名實例比如MYPC\SQL2008且未開啟 SQL Server Browser 服務則不能使用端口號需要使用實例名String url jdbc:sqlserver://MYPC\\SQL2008;databaseNameTestDB;encryptfalse;;注意在 Java 字符串中反斜杠\是轉義字符所以需要寫成\\。4.2 完整的 Java 連接測試代碼下面是一個最基礎、最完整的 JDBC 連接測試類。它包含了加載驅動、建立連接、執(zhí)行查詢、處理結果、關閉資源以及異常處理的完整流程。import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.sql.SQLException; public class SQLServerJDBCTest { // 定義連接參數 private static final String URL jdbc:sqlserver://localhost:1433;databaseNameTestDB;encryptfalse;trustServerCertificatetrue;; private static final String USER sa; // 你的 SQL Server 認證用戶名 private static final String PASSWORD YourStrong!Passw0rd; // 你的 sa 密碼 public static void main(String[] args) { Connection conn null; Statement stmt null; ResultSet rs null; try { // 1. 顯式加載驅動類對于新版驅動這步不是必須的但顯式聲明是好習慣 Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver); // 2. 建立數據庫連接 System.out.println(正在連接數據庫...); conn DriverManager.getConnection(URL, USER, PASSWORD); System.out.println(連接成功); // 3. 創(chuàng)建 Statement 對象用于執(zhí)行 SQL stmt conn.createStatement(); // 4. 執(zhí)行一個簡單的查詢 String sql SELECT VERSION AS SQLServerVersion; rs stmt.executeQuery(sql); // 5. 處理結果集 while (rs.next()) { String version rs.getString(SQLServerVersion); System.out.println(SQL Server 版本信息: version); } // 6. 可以繼續(xù)執(zhí)行其他操作例如創(chuàng)建一個測試表并插入數據 System.out.println(\n--- 創(chuàng)建測試表并插入數據 ---); String createTableSQL IF NOT EXISTS (SELECT * FROM sysobjects WHERE nameTestTable AND xtypeU) CREATE TABLE TestTable (ID INT PRIMARY KEY, Name NVARCHAR(50)); stmt.executeUpdate(createTableSQL); System.out.println(表 TestTable 檢查/創(chuàng)建完成。); String insertSQL INSERT INTO TestTable (ID, Name) VALUES (1, N測試用戶); int rowsAffected stmt.executeUpdate(insertSQL); System.out.println(插入數據成功影響行數: rowsAffected); // 查詢剛插入的數據 String selectSQL SELECT * FROM TestTable; rs stmt.executeQuery(selectSQL); System.out.println(查詢 TestTable 數據:); while (rs.next()) { System.out.println(ID: rs.getInt(ID) , Name: rs.getString(Name)); } } catch (ClassNotFoundException e) { System.err.println(未找到 JDBC 驅動類); System.err.println(請檢查是否已將 mssql-jdbc.jar 添加到 classpath。); e.printStackTrace(); } catch (SQLException e) { System.err.println(數據庫連接或操作失敗); System.err.println(錯誤信息: e.getMessage()); System.err.println(錯誤代碼: e.getErrorCode()); System.err.println(SQL狀態(tài): e.getSQLState()); e.printStackTrace(); } finally { // 7. 關閉資源遵循后開先關的原則 try { if (rs ! null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } try { if (stmt ! null) stmt.close(); } catch (SQLException e) { e.printStackTrace(); } try { if (conn ! null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } System.out.println(\n資源已關閉。); } } }4.3 代碼編譯與執(zhí)行將上述代碼保存為SQLServerJDBCTest.java。假設你的 JDBC 驅動 JAR 文件mssql-jdbc-12.4.2.jre8.jar放在同目錄的lib文件夾下。編譯打開命令行導航到代碼所在目錄。javac -cp “.;lib\mssql-jdbc-12.4.2.jre8.jar” SQLServerJDBCTest.java參數-cp指定類路徑.代表當前目錄;是 Windows 上的分隔符Linux/Mac 用:后面跟上 JAR 文件路徑。運行java -cp “.;lib\mssql-jdbc-12.4.2.jre8.jar” SQLServerJDBCTest如果一切配置正確你將看到控制臺輸出連接成功的信息、SQL Server 版本號以及測試表的數據操作結果。5. 深度排錯指南連接失敗的常見原因與解決連接失敗是常態(tài)成功是結果。根據熱詞中提到的“flink的jdbc連接器異?!?、“java: outofmemoryerror”等我們可以把常見問題歸類。當你的程序拋出SQLException時不要慌按以下步驟排查。5.1 網絡與基礎服務層排查這是最先需要排除的層面。癥狀Connection refusedNo route to host, 或長時間超時后失敗。排查步驟Ping 服務器在命令行ping 服務器IP或主機名確認網絡可達。檢查 SQL Server 服務在 SQL Server 配置管理器中確認 “SQL Server (實例名)” 服務正在運行。檢查 TCP/IP 協(xié)議同上在配置管理器中確認已啟用。檢查端口監(jiān)聽在服務器上打開命令行運行netstat -ano | findstr :1433。如果看到LISTENING狀態(tài)說明端口已監(jiān)聽。如果沒有回到上一步檢查協(xié)議和重啟服務。關閉防火墻測試臨時關閉服務器和客戶端的 Windows 防火墻測試是否能連接。如果能說明是防火墻規(guī)則問題需要按之前所述添加入站規(guī)則。檢查 SQL Server 錯誤日志位于MSSQL\Log目錄下查看是否有登錄失敗或其他錯誤記錄。5.2 身份驗證與登錄層排查癥狀Login failed for user ‘sa’.The login is from an untrusted domain...。排查步驟確認身份驗證模式確保安裝時選擇了“混合模式”并為sa設置了密碼。檢查sa賬戶狀態(tài)使用 Windows 身份驗證登錄 SSMS在“安全性”-“登錄名”中右鍵sa賬戶 - “屬性”?!俺R?guī)”頁確認密碼正確?!盃顟B(tài)”頁確保“登錄”已啟用“是否允許連接到數據庫引擎”為“授予”。連接字符串參數檢查user和password是否正確注意大小寫。如果服務器是命名實例且未開啟 SQL Server Browser 服務連接字符串中不能用端口號必須用服務器名\實例名格式。嘗試在連接字符串中加入integratedSecurityfalse;來強制使用 SQL 身份驗證。5.3 JDBC 驅動與 Classpath 問題癥狀ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver或No suitable driver found for jdbc:sqlserver://...。排查步驟驅動版本與 JDK 匹配確認你下載的 JAR 文件版本如jre8,jre11與運行環(huán)境的 JDK 版本匹配。Classpath 絕對路徑在-cp參數中使用 JAR 文件的絕對路徑可以避免路徑錯誤。例如-cp “.;C:\full\path\to\mssql-jdbc-12.4.2.jre8.jar”。驅動重復或沖突檢查項目依賴中是否引入了多個不同版本的 SQL Server JDBC 驅動這可能導致不可預知的行為。使用 Maven 的mvn dependency:tree命令查看依賴樹。5.4 高級配置與性能調優(yōu)初步當基本連接成功后你可能會考慮更穩(wěn)定的生產配置。使用連接池絕不推薦在每次需要時都創(chuàng)建新連接。使用如 HikariCP、Druid 等高性能連接池。它們管理連接的創(chuàng)建、銷毀和復用能極大提升應用性能。正確的加密配置生產環(huán)境必須使用加密。將連接字符串中的encrypt設為true并妥善管理服務器證書。如果使用自簽名證書trustServerCertificatetrue是臨時方案長期應導入可信證書。超時設置在連接字符串中添加loginTimeout30;登錄超時30秒和socketTimeout60;Socket操作超時60秒避免網絡波動導致線程長時間掛起。處理 OutOfMemoryError熱詞中提到了內存不足錯誤。在長時間運行、處理大量數據的 JDBC 應用中務必及時關閉ResultSet、Statement和Connection。即使使用連接池關閉ResultSet和Statement也是釋放客戶端資源的好習慣。對于海量數據查詢考慮使用setFetchSize分批獲取而不是一次性加載到內存。6. 從連接測試到實際應用最佳實踐與架構思考一次成功的連接測試只是起點。將 JDBC 集成到真實項目中需要更好的代碼組織和架構。6.1 封裝數據庫工具類將數據庫連接、關閉等操作封裝到一個工具類中避免代碼重復便于統(tǒng)一管理參數和異常。import java.sql.*; import java.util.Properties; public class DBUtil { private static String url; private static String user; private static String password; private static volatile DataSource dataSource; // 連接池數據源 static { // 可以從配置文件讀取這里寫死示例 url jdbc:sqlserver://localhost:1433;databaseNameTestDB;encryptfalse;; user sa; password YourStrong!Passw0rd; // 這里可以初始化 HikariCP 等連接池 // initDataSource(); } // 獲取連接簡單版未用連接池 public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); } // 關閉資源的方法 public static void close(Connection conn, Statement stmt, ResultSet rs) { try { if (rs ! null) rs.close(); } catch (SQLException e) { /* 記錄日志 */ } try { if (stmt ! null) stmt.close(); } catch (SQLException e) { /* 記錄日志 */ } try { if (conn ! null) conn.close(); } catch (SQLException e) { /* 記錄日志 */ } } // 重載方法用于關閉部分資源 public static void close(Connection conn, Statement stmt) { close(conn, stmt, null); } }6.2 使用 PreparedStatement 防止 SQL 注入永遠不要用字符串拼接的方式來構造 SQL 語句尤其是包含用戶輸入的。使用PreparedStatement是鐵律。// 錯誤示范易受SQL注入攻擊 String userName request.getParameter(“name”); String badSql “SELECT * FROM Users WHERE Name ‘” userName “’”; // 正確示范 String goodSql “SELECT * FROM Users WHERE Name ?”; PreparedStatement pstmt conn.prepareStatement(goodSql); pstmt.setString(1, userName); // 安全地設置參數 ResultSet rs pstmt.executeQuery();6.3 事務管理的基本概念當需要執(zhí)行一組“要么全部成功要么全部失敗”的數據庫操作時需要使用事務。Connection conn null; try { conn DBUtil.getConnection(); conn.setAutoCommit(false); // 1. 開啟事務關閉自動提交 // 執(zhí)行多個更新操作 updateAccountA(conn, …); updateAccountB(conn, …); conn.commit(); // 2. 提交事務 System.out.println(“事務執(zhí)行成功”); } catch (SQLException e) { if (conn ! null) { try { conn.rollback(); // 3. 發(fā)生異?;貪L事務 System.out.println(“事務已回滾”); } catch (SQLException ex) { ex.printStackTrace(); } } e.printStackTrace(); } finally { DBUtil.close(conn, null, null); }6.4 連接泄漏排查與監(jiān)控連接泄漏是線上系統(tǒng)常見問題表現為連接池耗盡應用無法訪問數據庫。除了確保在 finally 塊中關閉資源外還可以在連接池配置中設置泄漏檢測例如 HikariCP 的leakDetectionThreshold。監(jiān)控數據庫活動連接在 SQL Server 中可以定期執(zhí)行sp_who2或查詢sys.dm_exec_sessions視圖查看長時間空閑的連接其program_name或host_name可能指向你的應用從而定位泄漏代碼。從一次簡單的安裝連接測試延伸到驅動原理、排錯思路、性能調優(yōu)和工程實踐這個過程本身就是一個微型的項目復盤。面對 SQL Server 2008 這樣的老環(huán)境耐心和系統(tǒng)性排查比任何技巧都重要。記住連接失敗時從最底層的網絡、服務、端口查起逐步向上到身份驗證、驅動配置最后再到應用代碼這條路徑能解決絕大多數問題。而當你掌握了這些無論面對的是 SQL Server 2008 還是更新版本甚至是其他數據庫其核心的 JDBC 連接思想和排錯方法論都是相通的。

相關新聞

專科生AI論文助手千筆智能體功能解析與使用測評

??粕鶤I論文助手千筆智能體功能解析與使用測評

1. 項目背景與核心價值作為一名在學術工具領域深耕多年的研究者,我最近測試了一款名為"千筆專業(yè)學術智能體"的AI論文輔助平臺。這個專門面向??粕后w的學術工具,在當前AI寫作助手泛濫的市場中顯得尤為特別。與市面上大多數通用型寫作助手不同…

2026/7/30 1:41:42 閱讀更多
Flask+Vue房屋租賃系統(tǒng)開發(fā)實戰(zhàn)與架構解析

Flask+Vue房屋租賃系統(tǒng)開發(fā)實戰(zhàn)與架構解析

1. 項目概述:基于FlaskVue的房屋租賃系統(tǒng)開發(fā)房屋租賃市場近年來持續(xù)升溫,無論是長租公寓還是短租民宿,都需要高效的管理系統(tǒng)支撐業(yè)務運轉。這套基于Python Flask后端和Vue.js前端的房屋租賃系統(tǒng),采用了前后端分離架構&#xff0c…

2026/7/30 2:31:44 閱讀更多
Kademlia算法解析:P2P網絡的核心路由機制

Kademlia算法解析:P2P網絡的核心路由機制

1. Kademlia算法概述:當分布式網絡遇上XOR度量2002年由Petar Maymounkov和David Mazires提出的Kademlia算法,徹底改變了P2P網絡的路由機制。作為BitTorrent、以太坊、IPFS等主流分布式系統(tǒng)的核心協(xié)議,其獨特的設計哲學體現在三個關鍵維度&…

2026/7/30 2:21:43 閱讀更多
[GESP202606 四級] 掃雷

[GESP202606 四級] 掃雷

B4557 [GESP202606 四級] 掃雷 https://www.luogu.com.cn/problem/B4557 中國計算機學會(CCF)2026年6月C四級講解——掃雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四級] 掃雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…

2026/7/30 0:01:06 閱讀更多