Android SQLite插入唯一

时间:2010-07-30 08:41:44

标签: android database sqlite

简单的问题,但我找不到蚂蚁半体面的文件。是的,所以我创建了我的SQLite数据库,但它有两个问题或一个取决于你如何看待它!数据库创建正常,我可以在基本列表视图中显示数据,但是在更改电话/模拟器的方向时,插入语句再次运行并复制所有记录。我猜测这与放在OnCreate()方法中的所有代码有关。 我的主要问题是如何执行INSERT UNIQUE或查询数据库以查看记录是否存在?我只能在Android平台上找到关于SQLite数据库参数的任何好文档。

任何帮助都很有帮助!

干杯

3 个答案:

答案 0 :(得分:6)

SQLite有一个INSERT OR REPLACE命令(简称REPLACE,或使用SQLiteDatabase.replace())可以做你想做的事。

但是我建议你的应用程序不应该在每次创建Activity时重新插入数据库,除非确实需要,所以你可能想要考虑更改设计。

答案 1 :(得分:2)

你应该使用Android SDK中已经存在的DatabaseUtils .stringForQuery()静态方法来轻松检索一个值,这个例子适用于String bot,还有{{1}的方法}}

Long

在db上运行查询并返回第一行第一列中的值的实用程序方法。

这样的东西
stringForQuery(SQLiteDatabase db, String query, String[] selectionArgs)

此示例是获取字符串值,但您可以轻松调整以获得String myString=DatabaseUtils.stringForQuery(getDB(),query,selectionArgs); 值,并且您的查询应该类似

Long

如果返回的数字大于零,则该字段已存在于数据库中。

还要查看处理方向更改的代码。


@nutone

更新

在API 11及更高版本上,您还可以使用select count(*) from mytable where field1='stringtocheckagainst' 函数直接获取(已过滤)行的数量。

DatabaseUtils.queryNumEntries

答案 2 :(得分:2)

有一件事是您需要处理您的方向更改问题,在每次方向更改时访问数据库会消耗很多。

第二件事,关于检查重复记录问题,您可以将列定义为唯一,如

CREATE TABLE table_name(column_definition, unique(column_names) ON CONFLICT replace);` hen 

您可以像往常一样执行插入,db将确保不存在重复项。