2016-09-16 66 views
-4

我从服务器的sqlite表中插入记录。它像一个魅力和记录成功插入。现在我想要的是,当用户下次启动应用程序时,它将再次插入重复记录。如何只向SQlite插入记录并忽略已存在的记录?

我想只插入新记录,如果可用并忽略已存在的记录。

db.execSQL("Insert into myTable(ProjectNo,ProjectId,ThirdParty,SealingNumber,BookNumber,SupplyType,ConsAcNo,KnoNo,MeterSrMo,ConsName,ConsAddress1,ConsAddress2,ConsAddress3,TelephoneNo, ConsMobileNo,SanctionLoad, MeterMake, MeterType, PhaseType, IsCompleted, Contractor ")) values ('" + c.getString("PROJECT_NUMBER") + "'," + c.getString("PROJECT_ID") + ",'" + c.getString("THIRD_PARTY") + "'," + c.getString("SEALING_NUMBER") + "," + c.getString("BOOK_NUMBER") + "," + c.getString("SUPPLY_TYPE") + "," + c.getString("CONS_ACCOUNT_NO") + "," + c.getString("KNO_NUMBER") + ",'" + c.getString("MTR_SERIAL_NO") + "','" + c.getString("CONS_NAME") + "','" + c.getString("CONS_ADDRESS1") + "','" + c.getString("CONS_ADDRESS2") + "','" + c.getString("CONS_ADDRESS3") + "','" + c.getString("TELEPHONE_NO") + "','" + c.getString("CONS_MOBILE_NO") + "','" + c.getString("SANCTION_LOAD") + "','" + c.getString("METER_MAKE") + "','" + c.getString("METER_TYPE") + "','" + c.getString("METER_PHASE") + "','N', '"+ c.getString("CONTRACTOR1") +"')"); 

我试过下面的查询但我失败了。

db.execSQL("Insert into FieldUtilityData (ProjectNo,ProjectId,ThirdParty,SealingNumber,BookNumber,SupplyType,ConsAcNo,KnoNo,MeterSrMo,ConsName,ConsAddress1,ConsAddress2,ConsAddress3,TelephoneNo, ConsMobileNo,SanctionLoad, MeterMake, MeterType, PhaseType, IsCompleted, Contractor WHERE NOT EXISTS(SELECT ConsAcNo FROM FieldUtilityData WHERE ConsAcNo = " + c.getString("CONS_ACCOUNT_NO") + ")) values ('" + c.getString("PROJECT_NUMBER") + "'," + c.getString("PROJECT_ID") + ",'" + c.getString("THIRD_PARTY") + "'," + c.getString("SEALING_NUMBER") + "," + c.getString("BOOK_NUMBER") + "," + c.getString("SUPPLY_TYPE") + "," + c.getString("CONS_ACCOUNT_NO") + "," + c.getString("KNO_NUMBER") + ",'" + c.getString("MTR_SERIAL_NO") + "','" + c.getString("CONS_NAME") + "','" + c.getString("CONS_ADDRESS1") + "','" + c.getString("CONS_ADDRESS2") + "','" + c.getString("CONS_ADDRESS3") + "','" + c.getString("TELEPHONE_NO") + "','" + c.getString("CONS_MOBILE_NO") + "','" + c.getString("SANCTION_LOAD") + "','" + c.getString("METER_MAKE") + "','" + c.getString("METER_TYPE") + "','" + c.getString("METER_PHASE") + "','N', '"+ c.getString("CONTRACTOR1") +"')"); 
+1

保持一个** PRIMARY KEY **或列有** ** UNIQUE约束。在重复记录的情况下,它会抛出一个错误(_primary约束失败..._)。 –

回答

0
public int getFullCount(String table, String where) { 
     Cursor cursor = db.query(false, table, null, where, null, null, null, null, null); 
     try { 
      if (cursor != null) { 
       cursor.moveToFirst(); 
       no = cursor.getCount(); 
       cursor.close(); 
      } 
     } finally { 
      cursor.close(); 
     } 
     return no; 
    } 

使用此功能,并通过表名&条件。在插入检查计数之前,如果计数返回将大于0,则不添加记录,否则添加记录

+0

他不想删除现有记录。他只希望插入新的非重复记录,保持现有记录不变。 –

+0

@MonishKamble写入它将删除记录的地方。你在哪里编写插入记录的代码。在此之前,使用此功能获得计数。如果计数== 0然后插入记录,否则离开它,因为如果计数> 0,那么它意味着记录已经存在 –

+0

如果计数大于0,那么它也不会插入新的可用记录,我想插入新记录并忽略已经存在的记录在我的桌子上。 –

1

检查使用where条件,如果匹配,则比更新表或插入。

做这种方式,

db.open(); 

     //for insert in db 
     ContentValues cv = new ContentValues(); 
     cv.put("ProjectNo", "ProjectNo"); 
     cv.put("ProjectId", "ProjectId"); 
     cv.put("SealingNumber", "SealingNumber"); 
     cv.put("ConsAcNo", "ConsAcNo"); 
     cv.put("KnoNo", "KnoNo"); 
     cv.put("MeterSrMo", "MeterSrMo"); 
     cv.put("ThirdParty", "ThirdParty"); 
     cv.put("BookNumber", "BookNumber"); 
     cv.put("SupplyType", "SupplyType"); 
     cv.put("ConsName", "ConsName"); 
     cv.put("ConsAddress1", "ConsAddress1"); 
     cv.put("ConsAddress2", "ConsAddress2"); 
     cv.put("ConsAddress3", "ConsAddress3"); 
     cv.put("TelephoneNo", "TelephoneNo"); 
     cv.put("ConsMobileNo", "ConsMobileNo"); 
     cv.put("SanctionLoad", "SanctionLoad"); 
     cv.put("MeterMake", "MeterMake"); 
     cv.put("MeterType", "MeterType"); 
     cv.put("PhaseType", "PhaseType"); 
     cv.put("IsCompleted", "IsCompleted"); 
     cv.put("Contractor", "Contractor"); 

     //your where condition (change as per your requirement) 
     String whereClause = "ProjectNo = " + "PROJECT_NUMBER" + " AND " + "ProjectId" + " = PROJECT_ID" + "AND " 
      + "SealingNumber =" + "SealingNumber" + "AND" + " ConsAcNo = " + "ConsAcNo" + "AND" + "KnoNo = " + "KnoNo" 
      + "AND" + "MeterSrMo = " + "MeterSrMo"; 

     Log.e("where ", "-->>" + whereClause); 
     //to get count if it is more than zero than update else insert to table 
     String query = "SELECT count(*) as count from myTable where " + whereClause; 

     //check count if that value exists in db 
     if (query.trim().length() <= 0) { 
      db.insert(myTable, intCode, cv); //intCode is primary key 
     } else { 
      db.update(myTable, cv, whereClause, null); 
     } 
     db.close(); 
+0

这个帖子消耗时间和性能也下降 –

+0

检查我更新的答案@ Moin Khan希望能解决你的问题。 –

+0

这段代码我的朋友怎么样?@ Jitendraramoliya @?Moin Khan –