大家好我有代码将数据添加到数据库中,并在oncreate上调用该代码。但每次创建片段时,它都会一次又一次地将数据保存到数据库中。我不想那样。我怎样才能防止这是我的代码获取数据并将其保存到数据库。
public void getcontacts(){
Cursor phones;
phones = getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
while (phones.moveToNext()){
String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
DataBaseOperations hell = new DataBaseOperations(getActivity());
SQLiteDatabase db = hell.getWritableDatabase();
hell.SaveContacts(name, phoneNumber, db);
}
phones.close();
}
这是保存在数据库中的代码。
public void SaveContacts(String Name,String phone,SQLiteDatabase db ){
ContentValues sv = new ContentValues();
sv.put(mDatabase.Tableinfo.Contacts_name, Name);
sv.put(mDatabase.Tableinfo.Contacts_phone, phone);
db.insert(mDatabase.Tableinfo.contacts, null, sv);
}
编辑 - 这是我到目前为止所做的,但我如何设置一个约束,它将冲突。我已经添加了一个自动增量主键作为唯一键,但它们将如何冲突?但仍然是它在database.n中的保存值。我在哪里设置一个素数键作为约束?????
public void SaveContacts(String Name,String phone,SQLiteDatabase db ){
ContentValues sv = new ContentValues();
sv.put(mDatabase.Tableinfo.Contacts_name, Name);
sv.put(mDatabase.Tableinfo.Contacts_phone, phone);
db.insertWithOnConflict(mDatabase.Tableinfo.contacts, null, sv, SQLiteDatabase.CONFLICT_REPLACE);
EDIT- 2 - 如何在这种查询中创建唯一的列???
private static final String Contacts_Table = "CREATE TABLE "+
mDatabase.Tableinfo.contacts +"("
+mDatabase.Tableinfo.Contacts_name+" TEXT,"
+mDatabase.Tableinfo.Contacts_phone+" TEXT NOT NULL UNIQUE,"
+mDatabase.Tableinfo.isChattris+" TEXT,"
+mDatabase.Tableinfo.status_contact+" TEXT,"
+mDatabase.Tableinfo.Contact_pic+" BLOB"+")";
刚刚添加了NOT NULL UNIQUE。 这是约束。
答案 0 :(得分:1)
编辑:定义约束以便触发冲突行为,更改CREATE TABLE
语句。例如,这将导致重复(名称,电话)对触发它。您可能希望使用某种联系人ID。
CREATE TABLE mytable (
name TEXT,
phone TEXT,
UNIQUE(name, phone)
)