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

iOS FMDB 查詢無資料排查:資料庫路徑、SQL、欄位名三步驗證法

     編輯:程式設計綜合問答

常見無資料三大原因

  1. 資料庫未正確打開:路徑錯誤、檔案不存在、權限不足。
    檢查:`[_dataBase open]` 返回值,列印絕對路徑確認。
  2. SQL 語句錯誤或無匹配行:表名、欄位名拼寫錯誤、條件不成立。
    檢查:複製 SQL 到 SQLite 專用工具(如 DB Browser for SQLite)直接執行,觀察結果。
  3. 欄位名與模型屬性不對應:`stringForColumn:@"title"` 但表中欄位叫 `news_title`。
    檢查:`PRAGMA table_info(News);` 確認實際欄位名。

排查步驟範例

// 1. 確認資料庫打開
if (![_dataBase open]) {
    NSLog(@"DB open failed: %@", [_dataBase lastErrorMessage]);
    return;
}

// 2. 執行查詢並檢查錯誤
FMResultSet *set = [_dataBase executeQuery:@"SELECT * FROM News"];
if (!set) {
    NSLog(@"Query failed: %@", [_dataBase lastErrorMessage]);
    return;
}

// 3. 遍歷並列印原始欄位名驗證
while ([set next]) {
    NSLog(@"Columns: %@", [set columnNames]); // 列印所有欄位名
    NewsItem *item = [[NewsItem alloc] init];
    item.newsTitle = [set stringForColumn:@"title"]; // 必須與 columnNames 完全一致
    item.newsImageUrl = [set stringForColumn:@"imageUrl"];
    [_dataArray addObject:item];
}

進階建議

  • 使用 `FMDatabaseQueue` 進行線程安全操作。
  • 開啟 SQL 追蹤:`[_dataBase setTraceExecution:YES];` 控制台輸出每條 SQL 耗時。
  • 考慮引入 ORM(如 GRDB.swift、SQLite.swift)減少手寫映射錯誤。

按「連線→SQL→映射」三步驗證,可快速定位 FMDB 查無資料的根因。

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