如何在Android上存储SQLite中的字符串集合?

时间:2011-08-08 19:30:49

标签: java android database sqlite

我对在应用程序中使用数据库缺乏经验,所以我需要一些指导。

我有一个带有几个原始字段的Java对象,以及对Strings和ArrayList对象的几个引用。原语和字符串很好地映射到可用的SQLite字段,但我不确定如何持久保存ArrayLists。

我有两个想法,其中一个是序列化ArrayLists并将它们存储在Text字段中,另一个是有一个指向arity 1的表的列,我可以在其中存储单个字符串,但我不确定如何在android中实现它。我对不同的方法持开放态度,但我不知道如何使用SQLite在java中实现后者,因此解决方案很可爱。感谢。

3 个答案:

答案 0 :(得分:9)

在不知道更多细节的情况下,我可以说教科书的方法是为数组列表创建第二个表,然后在数组列表中包含主记录的id。

例如,假设您的对象包含

String name;
int age;
ArrayList<String> hobbies;

您可以创建如下表格:

create table person (personid int, name varchar(30), age int);
create table hobby (hobbyid int, personid int, description varchar(30));

然后您的数据可能如下所示:

Person
11   Bob    18
12   Sally  68
13   Ford   42

Hobby
21   11   fishing
22   11   hunting
23   12   needlepoint
24   12   rock-climbing
25   13   hitch-hiking   

要获取任何人的爱好列表,您可以使用如下查询:

select person.name, hobby.description
from person
join hobby on person.personid=hobby.personid

答案 1 :(得分:7)

一般来说(根据我所学到的)如果你有一个对象,它本身包含一个其他对象的列表,那将是1对多(或可能是多对多)的关系。要存储此数据,您需要使用另一个表。在另一个表中,您将拥有该对象的主键,然后是引用它所属的父对象的外键。有关更好的解释,请参阅this链接。

示例:

CREATE TABLE User (
    _id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    name TEXT

);

CREATE TABLE UserPicture(
    _id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    userId INTEGER,
    path TEXT

FOREIGN KEY(userId) REFERENCES User(_id)
);

现在说当你保存到数据库时,你有一个用户对象,带有List of UserPictures' 将想要迭代每张图片并使用。将每个图片插入UserPicture表 userId作为返回User表的链接。

在多对多关系的实例中,每个Object都有一个子对象的List。 更好的例子是会员/角色系统。用户将拥有角色列表和角色 会有一个用户列表,因为用户可以(通常)担任多个角色,而角色当然可以 多个用户。这只是需要什么叫做连接表我认为是什么。 UserInRole将有两列,UserID和RoleID,以显示User X属于Role Y。

至于如何实现它,搜索“Android sqlite教程”。 Herehere是两个链接,其中包含有关如何设置sqlite android数据库应用程序的教程。

答案 2 :(得分:0)

您可以使用此库, 在字符串列表中使用注释“ @SaveList”

//To save
EscapeSQLBoiler.getEscapeSQLBoiler(this).saveMyList("UniqueKey", strings);

//to get
strings = EscapeSQLBoiler.getEscapeSQLBoiler(this).giveMyListSavedInKey(UniqueKey);

库路径

https://dl.bintray.com/bipinayetra/maven/com/bipinayetra/save-processor/

https://dl.bintray.com/bipinayetra/maven/com/bipinayetra/save-annotation/

下载

dependencies {
    annotationProcessor 'com.bipinayetra:save-processor:1.0.0'
    implementation 'com.bipinayetra:save-annotation:1.0.0'
}

要使用“保存列表”库,请将插件添加到您的构建脚本中:

allprojects {
    repositories {
        maven {
            url "https://dl.bintray.com/bipinayetra/maven"
        }
    }
}

您还可以在Blog上查看此信息

https://www.bipinayetra.com/products/2018/12/25/save-yourself-from-saving