【问题标题】:Duplicate Entries in SQLiteSQLite 中的重复条目
【发布时间】:2012-05-10 10:17:00
【问题描述】:

我正在从 Android 手机获取电话号码和联系人姓名并将其存储在 SQLite 数据库中。现在我的问题是,每当我刷新/重新加载应用程序时,SQL 条目(电话和联系人)都会一次又一次地插入,从而导致重复的条目。如何阻止这种情况,顺便说一句,我正在使用 Phonegap!

我正在使用这个简单的代码来填充数据库

tx.executeSql('CREATE TABLE IF NOT EXISTS details (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, phone TEXT)');

但它会导致重复输入。

【问题讨论】:

  • 简单...在插入之前删除所有记录...或在插入之前进行可用性检查... :)
  • 但是,如果您每次刷新或重新加载时都阅读联系人,为什么还要存储联系人。你可以维护一个联系人列表吗?
  • 我多么愚蠢,我可以将联系人保存在数据库中,而不是一次又一次地检索它们......!

标签: android sql sqlite cordova


【解决方案1】:

停止这种情况就像定义两个字段的主键一样简单,如下所示:

CREATE TABLE contacts(
  name CHAR(10) NOT NULL,
  address INTEGER,
  phone INTEGER NOT NULL,
  song VARCHAR(255),
  PRIMARY KEY (name, phone)
)

此键将确保数据库中没有相同名称和电话的条目。

希望这会有所帮助!

【讨论】:

  • 他不需要每次都尝试初始插入。这将是开销,因为它仍然会在每次刷新和重新启动应用程序时尝试插入所有联系人。但是很好的查询可以避免在插入的每个新条目上进一步重复。
  • 只有 db 知道之前是否插入过记录。没有其他方法可以检查这一点。它必须在数据库级别完成。
  • 简短仅供参考:INSERT INTO contacts (name, phone) values ('JustinT', NULL)。现在重复几次,你的桌子上有几个 JustinT:s。与其他 NULL 值相比,NULL 不被认为是唯一的。
【解决方案2】:

将解决重复输入问题:

sampleDB.execSQL("INSERT OR REPLACE INTO measure_table (measure) " + "VALUES ( '" + "Length" + "')");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-23
    • 2015-03-01
    • 2013-01-15
    • 2012-04-11
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    相关资源
    最近更新 更多