Android 如何只向SQlite插入记录而忽略已经存在的记录?
我正在从服务器向sqlite表中插入记录。它就像一个魔咒,成功地插入了唱片。现在我想要的是,当用户下次再次启动应用程序时,它将再次插入重复记录 如果可用,我只想插入新记录,而忽略已经存在的记录 我尝试了下面的查询,但失败了Android 如何只向SQlite插入记录而忽略已经存在的记录?,android,json,database,sqlite,android-studio,Android,Json,Database,Sqlite,Android Studio,我正在从服务器向sqlite表中插入记录。它就像一个魔咒,成功地插入了唱片。现在我想要的是,当用户下次再次启动应用程序时,它将再次插入重复记录 如果可用,我只想插入新记录,而忽略已经存在的记录 我尝试了下面的查询,但失败了 db.execSQL("Insert into FieldUtilityData (ProjectNo,ProjectId,ThirdParty,SealingNumber,BookNumber,SupplyType,ConsAcNo,KnoNo,MeterSrMo,Cons
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") +"')");
使用此函数并传递表名和条件。在插入检查计数之前,如果计数返回值将大于0,则不添加记录,否则添加记录使用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();
将ConAcNo设置为表的主键,并使用SQLiteDatabase类的insert。。。方法请记住,它不会抛出任何错误,并在出现任何错误时返回-1。如果您试图插入重复记录,它将导致错误并返回-1,您可以忽略它
他不想删除现有记录。他只希望插入新的非重复记录,保持现有记录不变。@MonishKamble在写入的地方将删除记录。您正在编写代码以插入记录的位置。在此之前,使用此函数获取计数。如果count==0,则插入记录,否则保留它,因为如果count>0,则表示记录已经存在如果count大于0,则它也不会插入新的可用记录,我想插入新记录并忽略表中已有的记录。是否从服务器端获取此信息?是,我从服务器获取json并插入sqlite。使用唯一约束维护主键或列。它将抛出errorprimary约束失败。。。如果记录重复,请检查我的更新answer@Moin汗希望这能解决你的问题。我的朋友,这段代码怎么样?@Jitendraramoliya@?Moin Khan
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;
}
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();