我对在应用程序中使用数据库缺乏经验,所以我需要一些指导。
我有一个带有几个原始字段的Java对象,以及对Strings和ArrayList对象的几个引用。原语和字符串很好地映射到可用的SQLite字段,但我不确定如何持久保存ArrayLists。
我有两个想法,其中一个是序列化ArrayLists并将它们存储在Text字段中,另一个是有一个指向arity 1的表的列,我可以在其中存储单个字符串,但我不确定如何在android中实现它。我对不同的方法持开放态度,但我不知道如何使用SQLite在java中实现后者,因此解决方案很可爱。感谢。
答案 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教程”。 Here和here是两个链接,其中包含有关如何设置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。