我在多设备android系统上有一个sqlite数据库需要UUID(是的,它需要它们),但是我没有将UUID设置为主键,而是UUID只是一个列而主键只是一个每个设备上的INTEGER(未传输),而是在本地android数据库上自动生成
我正在根据UUID是否存在进行更新(如果失败)插入例程 - 这非常慢,最终我想将其转换为带有SQLITESTATEMENT的批量系统
然而,为了让我达到这一点,我需要使INSERT OR REPLACE(或REPLACE INTO)与我的数据集一起工作 - 据我所知它只能根据主键是否已经存在 - 因为我的主键不是我真正关心的如何根据不同的列使Replace Into工作? 或许我可以用不同的方式进行批量插入 - 这不涉及替换intos - 但仍然可以处理插入或更新 -
感谢任何帮助
我一直用于参考的一些项目 How do I UPDATE a row in a table or INSERT it if it doesn't exist?
http://www.buzzingandroid.com/2013/01/sqlite-insert-or-replace-through-contentprovider/
Improve INSERT-per-second performance of SQLite?
How do I use prepared statements in SQlite in Android?
http://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html#execute() Android SQLite database: slow insertion
答案 0 :(得分:3)
只要您创建UUID字段INSERT OR REPLACE
,即使UUID不是主键,也可以使用UNIQUE
;
CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
uuid UUID UNIQUE NOT NULL
);
任何违反UNIQUE
约束的插入都会替换现有行(但会为新行生成新的主键)