【发布时间】:2015-12-18 22:01:06
【问题描述】:
大家好,我有将数据添加到数据库的代码,该代码在 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);
}
编辑-这是我到目前为止所做的,但我如何设置它会冲突的约束。我添加了一个自动增量主键作为唯一键,但它们将如何冲突?但它仍然在数据库中再次保存值。我在哪里将初级键设置为约束?????
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。 这就是约束。
【问题讨论】:
-
您在
ContactsContract.CommonDataKind.*中有您的联系人数据,那么为什么要在您的私人数据库中复制这些数据呢? -
@pskink - 好点
-
我会将这些数据发送到服务器数据库进行检查。它就像 Whatsapp 类型的应用程序。
-
它没有解释为什么要单独复制您的数据
-
对不起,如果我无法解释,但我只有这种方法来做我需要的事情。
标签: android sqlite android-sqlite