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

Chi*_*nex 5 java database sqlite android

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

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

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

Jay*_*Jay 10

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

例如,假设您的对象包含

String name;
int age;
ArrayList<String> hobbies;
Run Code Online (Sandbox Code Playgroud)

你会创建这样的表:

create table person (personid int, name varchar(30), age int);
create table hobby (hobbyid int, personid int, description varchar(30));
Run Code Online (Sandbox Code Playgroud)

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

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   
Run Code Online (Sandbox Code Playgroud)

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

select person.name, hobby.description
from person
join hobby on person.personid=hobby.personid
Run Code Online (Sandbox Code Playgroud)


Jac*_*ack 7

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

例:

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)
);
Run Code Online (Sandbox Code Playgroud)

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

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

至于如何实现它,搜索"Android sqlite教程".这里这里有两个链接,教程如何设置一个sqlite android数据库应用程序.