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

Android SQLite 避免重複插入:唯一索引 + INSERT OR REPLACE

     編輯:程式設計綜合問答

方案一:資料庫層面約束(最可靠)

// 建表時加入唯一索引
CREATE TABLE contacts (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id TEXT UNIQUE,  -- 唯一約束
    name TEXT,
    phone TEXT
);

// 插入時用 INSERT OR REPLACE (或 ON CONFLICT REPLACE)
INSERT OR REPLACE INTO contacts (user_id, name, phone) VALUES (?, ?, ?);

效果:user_id 存在則更新該行,不存在則插入新行。

方案二:應用層檢查(效能較差)

// 查詢是否存在
Cursor c = db.query("contacts", new String[]{"id"}, "user_id=?", new String[]{userId}, null, null, null);
if (c.getCount() == 0) {
    // 插入
} else {
    // 更新或忽略
}
c.close();

方案三:SQLite UPSERT 語法 (3.24.0+)

INSERT INTO contacts (user_id, name, phone) VALUES (?, ?, ?)
ON CONFLICT(user_id) DO UPDATE SET name=excluded.name, phone=excluded.phone;

建議

  • **方案一最佳**:資料庫保證資料完整性,應用層無需額外查詢
  • 定義 UNIQUE 索引自動建立索引,查詢效能也不受影響
  • 若需保留建立時間,更新時勿覆蓋 created_at 欄位
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved