電話の通話記録をテーブルに集めています。
これはうまく機能します:
public long populate_Calls(String name, String phone, String type, String duration, String date, String contactid) {
ContentValues cv = new ContentValues();
cv.put(KEY_NAME, name);
cv.put(KEY_PHONE, phone);
cv.put(KEY_TYPE, type);
cv.put(KEY_DURATION, duration);
cv.put(KEY_DATE, date);
cv.put(KEY_CONTACTID, contactid);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}
テーブルが455レコードで構成されていると仮定します。ここで、ユーザーはいくつかの呼び出しを行い、テーブルを更新します。新しい通話データのみをテーブルに追加したい。私はこのコードを試してきましたが(私はそれを本当に理解していません)、テーブルを更新するたびに、ますます多くのレコードが追加されます。エミュレーターでは正常に動作します(発信呼び出しは12回しかありません)。
電話番号と日付だけを見る必要があると思います。それは電話を識別するからです。その番号とその日付のレコードがすでに存在する場合は、次のレコードにジャンプしてください。存在しない場合は、テーブルに追加してください。右?
public void populate_Calls2(String name, String phone, String type, String duration, String date, String contactid) {
ourDatabase.execSQL("INSERT INTO " + DATABASE_TABLE + " (" + KEY_NAME + "," + KEY_PHONE + "," + KEY_TYPE + "," + KEY_DURATION + "," + KEY_DATE + "," + KEY_CONTACTID + ") SELECT * FROM (SELECT '" + name + "'," + phone + "," + type + "," + duration + "," + date + "," + contactid + ") WHERE NOT EXISTS (SELECT * FROM " + DATABASE_TABLE + " WHERE " + KEY_PHONE + " = '" + phone + "' AND " + KEY_DATE + " = '" + date + "') LIMIT 1;");
}
私もこれを試しましたが、
'INSERT INTO CallTable VALUES(name、phone、type、duration、date、contactid)SELECT * FROM CallTable WHERE NOT EXISTS(SELECT * FROM CallTable WHERE phone ='30411552の準備時の0x11a2f0での失敗1(「SELECT」の近く:構文エラー) 'AND date ='1338569074976')LIMIT1;'。
および構文エラー:
ourDatabase.execSQL("INSERT INTO " + DATABASE_TABLE + " VALUES(" + KEY_NAME + "," + KEY_PHONE + "," + KEY_TYPE + "," + KEY_DURATION + "," + KEY_DATE + "," + KEY_CONTACTID + ") SELECT * FROM " + DATABASE_TABLE + " WHERE NOT EXISTS (SELECT * FROM " + DATABASE_TABLE + " WHERE " + KEY_PHONE + " = '" + phone + "' AND " + KEY_DATE + " = '" + date + "') LIMIT 1;");