Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在SQLite数据库中显示给定类别的多个句子_Android_Sqlite_Db Browser Sqlite - Fatal编程技术网

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方法中)时,必须打开这些外键。实际上不需要使用
    引用…
    ,因此如果不想打开外键,可以删除或忽略这些引用

告诉我们你做了什么?当有人点击“生活”时,你的查询是什么来获取结果的?使用两个不同的表。一个用于类别(或者称它们为标题,如果你愿意的话),一个用于句子。通过一个类别ID将句子与类别关联起来。这样你就可以获取与特定类别相关的所有句子。你能帮我做到这一点吗?我在youtube上搜索,但我没有找到任何东西,我怎样才能将数据库与android studio连接起来?我正在使用SQL的db浏览器使用谷歌,而不是YouTube,用于搜索教程。关键字:
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
;