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

iOS SQLite 數據遷移丟失數據及 Excel 直接導入方案

     編輯:程式設計綜合問答

問題一:Plist 轉 SQLite 數據少行

循環讀取 Plist 字典寫入 SQLite,發現目標表比源數據少十幾行。

常見原因

  • 主鍵衝突:表定義了 PRIMARY KEY 或 UNIQUE 約束,重複數據被忽略(INSERT OR IGNORE 或報錯未處理)。
  • 字段類型不匹配:數據含特殊字符(換行、引號、反斜杠)導致 SQL 語句解析錯誤,該行插入失敗。
  • 事務未提交:批量插入未包裹在事務中,中途崩潰導致部分數據丟失。
  • 數據清洗缺失:未對值進行轉義或參數化綁定,直接拼接 SQL 字符串。

解決建議

  1. 使用 FMDB 或原生 sqlite3_bind_* 參數化綁定,避免拼接 SQL。
  2. 插入前 BEGIN TRANSACTION,結束 COMMIT,保證原子性。
  3. 檢查表結構:是否有 NOT NULL、UNIQUE 約束導致插入失敗。
  4. 對字符串字段進行清洗:替換換行符、轉義引號,或用 Base64 編碼存儲。
  5. 啟用 SQLite 錯誤碼檢查:sqlite3_errcode()、sqlite3_errmsg() 定位失敗行。

問題二:Excel 直接導入 SQLite

不建議在 App 端直接解析 Excel(libxlsxwriter 體積大、解析慢)。推薦流程:

  1. 開發階段:用 Python(pandas/openpyxl)或 Node.js 讀取 Excel,生成 SQLite 數據庫文件(.db)。
  2. 打包:將預先生成的 .db 放入 App Bundle(Bundle Resources)。
  3. 首啟:將 Bundle 中的只讀數據庫複製到 Documents 目錄供讀寫。

Python 一鍵導入示例

import pandas as pd, sqlite3
df = pd.read_excel('data.xlsx')
conn = sqlite3.connect('data.db')
df.to_sql('table_name', conn, if_exists='replace', index=False)
conn.close()
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved