本教程是关于用C编写SQLite的系列教程中的第二篇。
SQLite将表集合存储在单个文件数据库中,通常以.db结尾。每个表就像一个电子表格,它由许多列组成,每一行都有值。
如果有帮助,可以将每一行看作一个结构,表中的列对应于结构中的字段。
一个表可以有磁盘上最多的行。有一个上限,但准确地说,它是巨大的18446744073709551616。
一个表最多可以有2000列,或者如果重新编译源代码,则可以将其最大值设置为32767列。
要使用SQLite,我们需要调用API。您可以在SQLite C/C++接口的官方介绍网页上找到此API的介绍。它是一个函数集合,易于使用。
首先,我们需要数据库的句柄。这是sqlite3类型,通过调用sqlite3_open(文件名,**ppDB)返回。之后,我们执行SQL。
让我们先稍微离题一点,使用SQLiteSpy创建一个可用的数据库和一些表。(请参阅上一篇教程,以获取指向该教程和SQLite数据库浏览器的链接)。
数据库about.DB将包含三个表,用于管理多个场馆的活动。这些活动包括派对、迪斯科和音乐会,将在五个场地(阿尔法、贝塔、查理、德尔塔和回声)举行。当您对这样的东西进行建模时,从电子表格开始通常会有所帮助。为了简单起见,我只存储日期而不是时间。
电子表格有三列:日期、地点、事件类型和大约十个类似的事件。日期为2013年6月21日至30日。
现在SQLite没有显式的日期类型,因此将其存储为int更容易、更快,并且与Excel使用日期(自1900年1月1日起的天数)的方式相同,具有int值41446到41455。如果将日期放在电子表格中,然后将日期列格式设置为小数点后0位的数字,它看起来如下所示:
现在我们可以将这些数据存储在一个表中,对于这样一个简单的示例,它可能是可以接受的。然而,良好的数据库设计实践需要一些规范化。
独特的数据项(如场馆类型)应在其自己的表格中,活动类型(派对等)也应在一个表格中。最后,由于我们可以在多个场馆举办多种活动类型(多对多关系),我们需要第三张桌子来容纳这些活动。
这三个表格是:
前两个表包含数据类型,因此场馆有名称alpha可供响应。我还添加了一个整数id,并为此创建了一个索引。由于场地(5个)和活动类型(3个)的数量较少,可以不使用索引来完成,但如果表格较大,则会变得非常缓慢。因此,任何可能被搜索的列,都要添加一个索引,最好是整数
要创建此数据库的SQL是:
事件表上的索引包含日期、id事件、事件类型和地点。这意味着我们可以查询事件表中的“某一日期的所有事件”、“某一地点的所有事件”、“所有各方”等以及“某一地点的所有各方”等组合。
运行SQLCREATETABLE查询后,将创建三个表。注意,我已将所有sql放在文本文件create.sql中,其中包括填充三个表中某些表的数据。
如果你把;正如我在create.sql中所做的那样,在这些行的末尾,您可以一次批处理并执行所有命令。没有;你必须自己运行每一个。在SQLiteSpy中,只需单击F9即可运行所有操作。
我还使用/*..*/sql将所有三个表放到多行注释中与C中相同。只需选择三行并按ctrl+F9键执行所选文本。
这些命令插入五个场地:
我再次将注释掉的文本添加到空表中,并从行中删除。没有撤销,所以小心这些!
令人惊讶的是,由于加载了所有数据(无可否认不多),磁盘上的整个数据库文件只有7KB。
我没有构建一堆十条insert语句,而是使用Excel为事件数据创建一个.csv文件,然后使用SQLite3命令行实用程序(随SQLite一起提供)和以下命令将其导入。
注意:任何带有句点(.)前缀的行都是命令。使用.help查看所有命令。要运行SQL,只需键入不带句点前缀的SQL即可。
您必须在每个文件夹的导入路径中使用双黑斜杠\\。仅在.import成功后执行最后一行。当SQLite3运行时,默认分隔符是:所以在导入之前必须将其更改为逗号。
现在我们有了一个完全填充的数据库,让我们编写C代码来运行这个SQL查询,它返回一个包含描述、日期和地点的参与方列表。
这在events和Vinces表之间使用IDVincement列进行连接,因此我们得到的是场馆的名称,而不是其int IDVincement值。
有很多功能,但我们只需要一小部分。处理顺序如下:
调用sqlite3_prepare后有一个可选步骤,其中绑定了任何传入的参数,但我们将保存该步骤以备将来的教程使用。
因此,在下面列出的程序中,主要步骤的伪代码是:
sql返回三个值,因此如果sqlite3.step()==SQLITE\u行,则这些值将从相应的列类型复制。我使用了int和text。我将日期显示为数字,但可以随意将其转换为日期。
示例代码清单
...下载PDF版本C和目标C的区别 引用 1.lyndapodcast,“Objective-C教程:为什么使用Objective-C?”?YouTube,YouTube,2014年3月12日。这里有2个。tutorialspoint.com网站. “C语言概述”,重点。此处提供2tutorialspoint.com网站. “C语言概述”,重点。...
...11月26日。此处提供2.O'Reilly–视频培训,“学习Swift编程教程–Swift Vs Objective-C”YouTube,YouTube,2014年10月21日。请点击此处3.“Xcode.”维基百科,维基媒体基金会,2017年12月16日。网址:4.Inc.,苹果。“你会喜欢使用的工具。”Xcod...
...计算环境,C语言是一种高级通用程序设计语言。 引用 1.教程要点。“C教程”,教程点,2018年3月23日。此处提供2“文档”。MATLAB&Simulink。此处提供2.“文档”,MATLAB和Simulink img.centered,.aligncenter{display:block;margin:0 auto 24px}....
...Swift之间的差异 引用 1.LinkedIn学习解决方案,“Objective-C教程:为什么要使用Objective-C?”?| 林达网’. YouTube,YouTube,2014年3月12日。此处提供2.O'Reilly–视频培训,“学习Swift编程教程–Swift Vs Objective-C”。YouTube,YouTube,2014年10...
...te比Realm更难使用。 文档 与SQLite相比,Realm没有太多的教程和文档。该领域仍在积极发展中。 SQLite有更多的教程和文档。 总结 - 领域(realm) vs. sqlite公司(sqlite) Realm数据库是为移动应用开发快速且易于使用的解决方案的一个...
...里有2.edurekaIN。YouTube,YouTube,2017年2月20日。这里有3点,教程。“Python2 Vs Python3”,教程点,1969年12月31日。这里有4点,教程。“Python3中的新增功能。”教程点,2017年8月15日。此处提供2.爱德华肯。YouTube,YouTube,2017年2月20日...
...。请在这里下载PDF版本Python和C语言的区别 引用 1.要点,教程。“C语言概述”,教程点,2017年11月1日。此处提供2.Point教程。“Python概述”,教程点,2017年10月5日。可在此处查阅3。“C与Python:比较”,Scribblings,2010年9月5日。可...
...请在这里下载PDF版本继承和Java接口的区别 引用 1.要点,教程。“Java继承”,教程点,2017年10月31日。此处提供2.Point教程。“Java接口”,教程点,2017年10月31日。此处提供2.要点,教程。“Java接口”, img.centered,.aligncenter{di...
...第二活跃的语言,已经存在了20多年。所有这些都意味着教程是丰富的,你不必担心语言会很快消失。 ...
... 微软虚拟学院还提供C语言和Windows及移动设备开发的官方教程。Stack Overflow——可以说是编码人员最重要的网站——是用C语言编写的,所以它在网站上有一个巨大的社区也就不足为奇了。 ...