作为刚掌握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。当在androidsqlite中,必须有一列为_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.打开 (取运行目录...