Java 在sqlite数据库中保存和检索键值对

Java 在sqlite数据库中保存和检索键值对,java,android,sqlite,Java,Android,Sqlite,您好,我正在寻找一种方法来检索和保存sqlite数据库中某个列项的键值对,以便更新listview 示例:如果我有一个名为“group”的列,其中有一个名为“family”的条目;关于该项目,我希望能够保存或检索该项目“家庭”的联系人列表(姓名和号码)。另一个项目条目也是如此 最好的方法是什么?。我尝试通过json使用Hashmap的ArrayList将联系人详细信息保存在表中的一列中。但这样做有困难。我试过这个: 保存时: //already have the name and number

您好,我正在寻找一种方法来检索和保存sqlite数据库中某个列项的键值对,以便更新listview

示例:如果我有一个名为“group”的列,其中有一个名为“family”的条目;关于该项目,我希望能够保存或检索该项目“家庭”的联系人列表(姓名和号码)。另一个项目条目也是如此

最好的方法是什么?。我尝试通过json使用Hashmap的ArrayList将联系人详细信息保存在表中的一列中。但这样做有困难。我试过这个:

保存时:

//already have the name and number from using the android contacts api

    final ArrayList<HashMap<String,String>> contacts = new ArrayList<HashMap<String,String>>();     
    HashMap<String, String> map = new HashMap<String,String>();
            map.put(name, number);
            contacts.add(map);

            JSONObject json_contacts = new JSONObject();

                try {
            json_contacts.put("contacts_Arrays", new JSONArray(contacts));
                    arraylist_to_string = json_contacts.toString();

                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            ContentValues values = new ContentValues(); 
            values.put(ContactDB.GROUP, groupname);
            values.put(ContactDB.GROUP_CONTACTS, arraylist_to_string);

            Log.d(TAG, "Successfully updating contacts for group");
            dbadapter.updateGroup(rowId, values);
            cursoradapter.notifyDataSetChanged();
//已经拥有使用android contacts api的姓名和号码
最终ArrayList联系人=新建ArrayList();
HashMap=newHashMap();
地图。放置(名称、编号);
联系人。添加(地图);
JSONObject json_contacts=新建JSONObject();
试一试{
json_contacts.put(“contacts_数组”,新的JSONArray(contacts));
arraylist_to_string=json_contacts.toString();
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
ContentValues=新的ContentValues();
value.put(ContactDB.GROUP、groupname);
value.put(ContactDB.GROUP\u CONTACTS,arraylist\u to\u string);
Log.d(标记“成功更新组联系人”);
dbadapter.updateGroup(rowId,值);
cursoradapter.notifyDataSetChanged();
在my bindview方法中检索时:

String contactDetails=cursor.getString(cursor.getColumnIndex(ContactDB.GROUP_CONTACTS))

if(contactDetails!=null){
试一试{
JSONObject json=新的JSONObject(contactDetails);
JSONArray json_array=json.optJSONArray(“联系人_array”);
for(int i=0;i

一点运气都没有,而且一开始也不确定这样做是否正确。构造数据库表的最佳方法是什么。我应该创建一个联系人对象并存储它,还是有更好的方法?谢谢

仅通过查看您的代码,
列表中的多个
HashMap
实例可能会导致内存过量,具体取决于存储数据的大小

由于要存储键值对,关系数据库(比如SQLite)通常不是正确的选择。Android具有存储简单键值对(使用基本数据类型)的功能


如果您想/需要用SQLite实现它,那么应该采用关系方式。如果我正确理解了您的问题,您将有如下表格:

Table "Groups"
+----------+------------+
| group_ID | group_name |
+----------+------------+
| 1        | Family     |
| 2        | Work       |
+----------+------------+

Table "Contacts"
+----------+------------+--------+
| name     | number     | group  |
+----------+------------+--------+
| Jon      | 0173401... | 1      |
| James    | 057123...  | 2      |
| Lukas    | 012343...  | 2      |
+----------+------------+--------+
从这个表中,您可以查询“James”和“Lukas”是“Work”组的成员。然后,只需搜索
-列设置为
-表中显示的值的条目,即可查询“工作”组的所有成员(即“工作”组的
2


使用此系统,您可以添加新的组和联系人,并将联系人放入(或多个)组中。

只需查看您的代码,列表中的多个
HashMap
实例可能会导致内存过量,具体取决于存储数据的大小

由于要存储键值对,关系数据库(比如SQLite)通常不是正确的选择。Android具有存储简单键值对(使用基本数据类型)的功能


如果您想/需要用SQLite实现它,那么应该采用关系方式。如果我正确理解了您的问题,您将有如下表格:

Table "Groups"
+----------+------------+
| group_ID | group_name |
+----------+------------+
| 1        | Family     |
| 2        | Work       |
+----------+------------+

Table "Contacts"
+----------+------------+--------+
| name     | number     | group  |
+----------+------------+--------+
| Jon      | 0173401... | 1      |
| James    | 057123...  | 2      |
| Lukas    | 012343...  | 2      |
+----------+------------+--------+
从这个表中,您可以查询“James”和“Lukas”是“Work”组的成员。然后,只需搜索
-列设置为
-表中显示的值的条目,即可查询“工作”组的所有成员(即“工作”组的
2


使用此系统,您可以添加新的组和联系人,并将联系人添加到(或多个)组中。

谢谢,这正是我想要的。我会尽力让你知道事情的进展。再次感谢汉克斯,这就是我要找的。我会尽力让你知道事情的进展。再次感谢