作为刚掌握SQLiteDatabase的新手,我的数据库中总是插入了重复的值让我很苦恼,网上又没有一丁点儿的提示,所以只能自己思考,自己摸索。现在想明白了,就给陷入同样苦恼的人一点帮助。
其实思想很简单,就是把待插入的值放到表中查询比照,如果相同就不插入,如果不同就插入,代码如下:
下面情景是添加某个省的名字数据到数据库中,如果该省已经在数据库中则不添加。
for (Province p : provinceList) { //provinceList是存有省名的集合
String provinceName = p.getProvinceName();
//把该省的省名作为查找条件
Cursor cursor = database.query("Province", new String[]{"province_name"}, "province_name = ?", new String[]{provinceName}, null, null, null);
if (cursor.getCount() == 0){
Log.d(TAG, "加入"+provinceName+"到数据库中");
//插入数据
ContentValues values = new ContentValues();
values.put("province_name", p.getProvinceName());
values.put("province_code", p.getProvinceCode());
database.insert("Province", null, values);
}else {
Log.d(TAG, "数据库中已存在" + provinceName);
就是这么简单,但是有时候脑子犯糊涂了就会卡住,特此记录。
在SQLITE中,可以用以下方法防止插入重复数据,
1.设置表的联合主键
2.在INSERT语句中添加OR IGNORE,即可(重复数据会跳过,且不影响后续数据插入)
示例如下:
insert OR IGNORE into PDA_Test (DeviceID,MethodName) values('1112','测试原有');
在sqlite中,要去除重复值,只需要加上distinct关键字便可,如:select distinct * from XXX。当在android的sqlite中,必须有一列为_id,或查询的时候将某一列作为_id列,如select XX as _id from XXX。问题是,在select的时候,如果我们不查询_id,或者不在查询中将某一列作为_id;便会报错。例如,我们在gd表中存入广东省所
这个问题在这里已有答案:我已经使用sqlite插入数据并获取结果,但我所做的是首先显示包含所获取值的列表,如果没有值,则列表显示空视图,指示用户将新项添加到sqlite数据库 . 但是当我尝试这个时它会向我显示一个错误,数据库中没有这样的表 . 我想知道如何检查表是否已创建,还是它有值 . 如何不向用户抛出异常以向表中插入新项 .数据库:public class BuisnessDatabaseH...
问题背景:我有两个表,其中主键是文本字段.当我重复使用具有相同数据的SQLiteDatabase.insertWithOnConflict(myTable,null,myValues,SQLiteDatabase.CONFLICT_REPLACE)时,我看到返回的值越来越大.因此看起来对于相同的数据集正在执行INSERT(而不是REPLACE).问题:但是,使用“SQLite数据库浏览器”查看这些...
首先创建数据库public class MySqLite extends SQLiteOpenHelper {
public MySqLite(Context context, String name, CursorFactory factory,
int version, DatabaseErrorHandler errorHandler) {
super(context, nam
insert or replace into table_name( id,type) values (1,0);
insert or ignore into table_name (id,type) values (2,0);
IF NOT EXISTS(SELECT * FROM table_name WHERE ….) THEN INSERT INTO ... ELSE UPDATE SE...
SQLite中使用约束解决插入/更新重复问题 网址: http://www.cnphp.info/sqlite-conflict-on-update.html
一直以来在使用SQL语句的时候都是力求简洁,把SQL精简到最优化以提高效率。这是做Web程序时养成的习惯。不过,最近在一个c#程序中使用到嵌入式数据库SQLite,让我对SQL语句的要求更提高了一步。例如,在向数据库中插入新行时,如果
where not exists
(select col1,col2...... from tableName where col1='{0}' and col2='{1}' ....)
2.下面这种写法field1为主键
假设你的表叫:yourtable,其有二个字段:field1, field2(假设都是 int 型,fiel...
<br />sqlite避免重复插入数据。<br /> <br />用insert语句插入数据,为避免重复插入又不打断数据处理。<br />首先要避免重复插入,就必须在插入时引发冲突。在表中设置了id字段,该字段为UNIQUE属性,当插入的id已存在时引发冲突。<br />引发冲突后insert会做一些处理,处理方式由OR字句定义。包含如下:ROLLBACK<br />当发生约束冲突,立即ROLLBACK,即结束当前事务处理,命令中止并返回SQLITE_CONSTRAINT代码。若当前无活动事务(除了每一条
我在我的数据库中创建了两个表,在这两个表中我同时插入值,现在我要做的是,我想在第二个表中插入记录,但条件是,如果有两个相同记录然后我想只插入一个记录不重复值,在第二个表中有两个字段一个是id,第二个是类别,当用户插入两个相同类别时,我想只插入一个条目,下面是我的代码不是工作正常,它插入所有记录接受重复值..public long InsertCat(String idd, String cat){...
[FMDBManager inDatabase:^(FMDatabase *db) {[db shouldCacheStatements];//开始启动事务[db beginTransaction];BOOL isRollBack = NO;@try {for (NSDictionary *dic in resultDic[@"events"]) {//replace into 首先尝试插入数据到...
第一次运行可以运行成功,再往后运行就会出现
android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed的异常情况
通过网友提供的资料:关于android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed的异常
文中大概的意思是说
你定义的自动为PRIMARY,而插入时想插入的值已经在表中存在。导致第一次插入正确,当第二次测试时相当于
就是你在建数据表的时候就用上面的代码写到表里面,以后直接插入就行了啊看来你还是不懂.. 给你个样例吧..源码如下;测试成功.版本 2.支持库 sqlite3.支持库 spec.子程序 __启动窗口_创建完毕.局部变量 ku, Sqlite数据库.局部变量 biao, Sqlite表.局部变量 sql, 文本型.局部变量 jg, 文本型, , "0".局部变量 a, 整数型ku.打开 (取运行目录...