Android 在SQLite数据库中显示给定类别的多个句子
我正在开发一个应用程序报价,并使用本地数据库导入报价。 我这里有一个问题,你可以在图片中看到,我想在一个标题中加入多个引号 例如,当我在应用程序中单击标题“生活”时,它只显示一个引用。我想让它给我一个报价,然后我滑到另一个Android 在SQLite数据库中显示给定类别的多个句子,android,sqlite,db-browser-sqlite,Android,Sqlite,Db Browser Sqlite,我正在开发一个应用程序报价,并使用本地数据库导入报价。 我这里有一个问题,你可以在图片中看到,我想在一个标题中加入多个引号 例如,当我在应用程序中单击标题“生活”时,它只显示一个引用。我想让它给我一个报价,然后我滑到另一个 您需要的是多个表,并且为了坚持标准化(将数据保持在最小值),您需要4个表 标题表。 引用本身的表。 为作者准备的表格(例如,不要重复“圣雄甘地”)。 映射/引用标题和引号的表(允许多对多关系) 标题表格需要两列; -一个是它的id(注意\u id已被使用,因为这可能是Andr
您需要的是多个表,并且为了坚持标准化(将数据保持在最小值),您需要4个表 标题表。 引用本身的表。 为作者准备的表格(例如,不要重复“圣雄甘地”)。 映射/引用标题和引号的表(允许多对多关系) 标题表格需要两列; -一个是它的id(注意\u id已被使用,因为这可能是Android的一个列名)。 -一个是标题本身 quote表需要三列; -一个是id(\u id再次)。 -一个用于引用本身。 -一个用于引用作者表的id author表需要两列; -一个是id(\u id再次)。 -一个是给作者的 最后一个表(title\u quote\u reference)需要两列 -一个参考标题 -一个参考报价 以下内容可用于构建上述表格、填充表格并运行显示全部内容的基本查询(就用户友好型数据而言(即,id/引用对用户来说没有任何意义):- 运行上述命令将/应该产生以下消息:-
DROP TABLE IF EXISTS title_quote_map
> OK
> Time: 0.622s
DROP TABLE IF EXISTS quote
> OK
> Time: 0.358s
DROP TABLE IF EXISTS author
> OK
> Time: 0.359s
DROP TABLE IF EXISTS title
> OK
> Time: 0.282s
CREATE TABLE IF NOT EXISTS author (_id INTEGER PRIMARY KEY, author TEXT UNIQUE)
> OK
> Time: 0.242s
CREATE TABLE IF NOT EXISTS title (_id INTEGER PRIMARY KEY, title TEXT UNIQUE)
> OK
> Time: 0.307s
CREATE TABLE IF NOT EXISTS quote (_id INTEGER PRIMARY KEY, quote TEXT UNIQUE, author_reference INTEGER REFERENCES author(_id))
> OK
> Time: 0.642s
CREATE TABLE IF NOT EXISTS title_quote_map (
title_reference INTEGER REFERENCES title(_id),
quote_reference INTEGER REFERENCES quote(_id),
UNIQUE (title_reference, quote_reference))
> OK
> Time: 0.307s
INSERT INTO title (title) VALUES
('Life'),
('Happiness'),
('Positivity'),
('Famous Quotes'),
('Friendship'),
('Love'),
('Family'),
('Motivation')
> Affected rows: 8
> Time: 0.34s
INSERT INTO author (author) VALUES
('Leonardo da-Vinci'),
('Mahatma Ghandi'),
('Winston Churchill'),
('anon')
> Affected rows: 4
> Time: 0.276s
INSERT INTO quote (quote,author_reference) VALUES
('Life is my message.',2),
('Not how long, but how well you have lived.',4),
('Never in the field of human combat have so many owed so much to so few',3),
('I love those who can smile in trouble',1)
> Affected rows: 4
> Time: 0.24s
INSERT INTO title_quote_map VALUES
(1,1),(1,2),(1,4), -- Life quotes
(2,2),(2,4), -- Happiness quotes
(3,1),(3,2),(3,4), -- Postivity quotes
(4,1),(4,3),(4,4), -- Famout quotes
(6,4), -- Love quotes
(8,1),(8,2),(8,4)
> Affected rows: 15
> Time: 0.242s
SELECT quote.quote, title.title, author.author
FROM title_quote_map
JOIN title ON title._id = title_quote_map.title_reference
JOIN quote ON quote._id = title_quote_map.quote_reference
JOIN author ON author._id = quote.author_reference
> OK
> Time: 0s
查询的结果将是:-
正如您所看到的,标题可以有多个引号,引号也可以有多个标题
您可以将查询修改为:-
SELECT quote.quote, title.title, author.author
FROM title_quote_map
JOIN title ON title._id = title_quote_map.title_reference
JOIN quote ON quote._id = title_quote_map.quote_reference
JOIN author ON author._id = quote.author_reference
ORDER BY random()
LIMIT 1
;
然后选择一个随机报价,例如当天的报价
- 注:上述包括外键,当使用/执行SQL“PRAGMA Foreign_Keys=on;”(在onOpen或onConfigure方法中)时,必须打开这些外键。实际上不需要使用
,因此如果不想打开外键,可以删除或忽略这些引用引用…
android sqlite相关表
。根据您的需要,不需要多对多关系中使用的第三个表(查找表)。您需要一个简单的一对多关系(一个类别,多个句子).Thaaank你真的帮了我很多我需要的就是如何连接android studio这里是我的代码因为它是一个外部数据库,你需要将数据库(be.db)复制到assets文件夹(sqliteAssetThelper的子目录数据库)中,然后复制(当数据库不存在时)到它的最终位置(通常是data/data/your_package/databases)。可以简化这一点。我可以拥有你的facebook以便我们可以交谈吗?当然,我真的很难在这里找到一个为SQlite在DB浏览器中创建DB的工作示例(如上所述),并将其从已放入的应用程序的资产文件夹中复制。请注意,堆栈溢出不是一项持续的代码编写服务。它用于回答有关特定编程问题的问题。
SELECT quote.quote, title.title, author.author
FROM title_quote_map
JOIN title ON title._id = title_quote_map.title_reference
JOIN quote ON quote._id = title_quote_map.quote_reference
JOIN author ON author._id = quote.author_reference
ORDER BY random()
LIMIT 1
;