首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android jtds 連線 MSSQL 完整指南:連線驗證與空結果集判斷

     編輯:程式設計綜合問答

核心痛點

使用 jtds 驅動連線 MSSQL 時,開發者常面臨兩大難題:
1. 如何即時判斷連線是否成功(而非等待逾時)
2. 執行查詢後如何正確判斷結果集是否為空

連線成功即時判斷

String url = "jdbc:jtds:sqlserver://192.168.1.100:1433/DBName;user=sa;password=123;loginTimeout=5;socketTimeout=10";
Connection conn = null;
try {
    conn = DriverManager.getConnection(url);
    // 連線成功即執行到此,若失敗會拋出 SQLException
    if (conn != null && !conn.isClosed()) {
        Log.d("DB", "連線成功");
    }
} catch (SQLException e) {
    Log.e("DB", "連線失敗: " + e.getMessage());
    // 此處可根據錯誤碼區分:網路不通、認證失敗、伺服器拒絕等
} finally {
    // 注意:這裡不關閉連線,留給後續使用
}

關鍵參數說明:

  • loginTimeout:登入逾時秒數(建議 5-10 秒)
  • socketTimeout:Socket 讀寫逾時(建議 10-30 秒)
  • 若需更精細控制,可使用 DriverManager.setLoginTimeout()

結果集空值正確判斷

Statement stmt = null;
ResultSet rs = null;
try {
    stmt = conn.createStatement();
    rs = stmt.executeQuery("SELECT * FROM Users WHERE Age > 100");
    
    // 正確判斷方式:使用 next() 移動游標
    if (rs.next()) {
        // 有資料,游標已指向第一筆
        do {
            String name = rs.getString("Name");
            int age = rs.getInt("Age");
            // 處理資料...
        } while (rs.next());
    } else {
        // 無資料:rs.next() 回傳 false
        Log.d("DB", "查無符合條件資料");
    }
} catch (SQLException e) {
    Log.e("DB", "查詢錯誤: " + e.getMessage());
} finally {
    // 必須按順序關閉
    try { if (rs != null) rs.close(); } catch (SQLException ignored) {}
    try { if (stmt != null) stmt.close(); } catch (SQLException ignored) {}
}

常見錯誤與避坑指南

錯誤做法正確做法原因
用 rs.getRow() == 0 判斷用 !rs.next() 判斷預設 ResultSet 為 TYPE_FORWARD_ONLY,getRow() 恆為 0
不關閉 ResultSet/Statementfinally 區塊逐層關閉導致連線洩漏、資料庫鎖定
在 UI 執行緒執行資料庫操作使用 AsyncTask、RxJava 或 Kotlin 協程ANR 崩潰、使用者體驗差
硬編碼連線字串加密儲存於 SharedPreferences 或 Keystore資安風險、難以維護

進階建議

  • 使用連線池(HikariCP、Druid)提升效能與穩定性
  • 採用 PreparedStatement 防止 SQL 注入
  • 實作連線重試機制(指數退避演算法)
  • 加入連線存活檢查(SELECT 1)

參考完整範例:Android jtds 連線 MSSQL 實戰教學

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved