2016-09-16 86 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 –

相關問題