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)
通常(从我所学到的)如果你有一个对象,它本身包含一个其他对象的列表,那将是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数据库应用程序.
归档时间: |
|
查看次数: |
9018 次 |
最近记录: |