在c教程2中编程sqlite

本教程是关于用C编写SQLite的系列教程中的第二篇。...

本教程是关于用C编写SQLite的系列教程中的第二篇。

Set of mysql queries in a database management software.

SQLite将表集合存储在单个文件数据库中,通常以.db结尾。每个表就像一个电子表格,它由许多列组成,每一行都有值。

如果有帮助,可以将每一行看作一个结构,表中的列对应于结构中的字段。

一个表可以有磁盘上最多的行。有一个上限,但准确地说,它是巨大的18446744073709551616。

一个表最多可以有2000列,或者如果重新编译源代码,则可以将其最大值设置为32767列。

sqlite api

要使用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位的数字,它看起来如下所示:

现在我们可以将这些数据存储在一个表中,对于这样一个简单的示例,它可能是可以接受的。然而,良好的数据库设计实践需要一些规范化。

独特的数据项(如场馆类型)应在其自己的表格中,活动类型(派对等)也应在一个表格中。最后,由于我们可以在多个场馆举办多种活动类型(多对多关系),我们需要第三张桌子来容纳这些活动。

这三个表格是:

  • 场馆-容纳所有五个场馆
  • eventtypes—保存所有三种事件类型
  • 事件-保存日期加地点id加事件类型id。我还为此事件添加了一个描述字段,例如“Jim的生日”。

前两个表包含数据类型,因此场馆有名称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查询,它返回一个包含描述、日期和地点的参与方列表。

  • SQL新手?阅读什么是SQL?

这在events和Vinces表之间使用IDVincement列进行连接,因此我们得到的是场馆的名称,而不是其int IDVincement值。

sqlite c api函数

有很多功能,但我们只需要一小部分。处理顺序如下:

  1. 使用sqlite3_Open()打开数据库,如果打开时出错,请退出。
  2. 使用sqlite3_Prepare()准备SQL
  3. 使用slqite3_步骤()循环,直到没有更多记录
  4. (在循环中)使用sqlite3_列处理每个列。。。
  5. 最后调用sqlite3_close(db)

调用sqlite3_prepare后有一个可选步骤,其中绑定了任何传入的参数,但我们将保存该步骤以备将来的教程使用。

因此,在下面列出的程序中,主要步骤的伪代码是:

sql返回三个值,因此如果sqlite3.step()==SQLITE\u行,则这些值将从相应的列类型复制。我使用了int和text。我将日期显示为数字,但可以随意将其转换为日期。​

示例代码清单

  • 发表于 2021-09-15 05:10
  • 阅读 ( 105 )
  • 分类:编程

你可能感兴趣的文章

c(c)和目标c(objective c)的区别

...下载PDF版本C和目标C的区别 引用 1.lyndapodcast,“Objective-C教程:为什么使用Objective-C?”?YouTube,YouTube,2014年3月12日。这里有2个。tutorialspoint.com网站. “C语言概述”,重点。此处提供2tutorialspoint.com网站. “C语言概述”,重点。...

  • 发布于 2020-10-16 06:52
  • 阅读 ( 259 )

xcode代码(xcode)和敏捷的(swift)的区别

...11月26日。此处提供2.O'Reilly–视频培训,“学习Swift编程教程–Swift Vs Objective-C”YouTube,YouTube,2014年10月21日。请点击此处3.“Xcode.”维基百科,维基媒体基金会,2017年12月16日。网址:4.Inc.,苹果。“你会喜欢使用的工具。”Xcod...

  • 发布于 2020-10-16 12:12
  • 阅读 ( 839 )

matlab语言(matlab)和c语言(c language)的区别

...计算环境,C语言是一种高级通用程序设计语言。 引用 1.教程要点。“C教程”,教程点,2018年3月23日。此处提供2“文档”。MATLAB&Simulink。此处提供2.“文档”,MATLAB和Simulink img.centered,.aligncenter{display:block;margin:0 auto 24px}....

  • 发布于 2020-10-18 11:32
  • 阅读 ( 235 )

目标c(objective c)和敏捷的(swift)的区别

...Swift之间的差异 引用 1.LinkedIn学习解决方案,“Objective-C教程:为什么要使用Objective-C?”?| 林达网’. YouTube,YouTube,2014年3月12日。此处提供2.O'Reilly–视频培训,“学习Swift编程教程–Swift Vs Objective-C”。YouTube,YouTube,2014年10...

  • 发布于 2020-10-19 22:48
  • 阅读 ( 366 )

领域(realm)和sqlite公司(sqlite)的区别

...te比Realm更难使用。 文档 与SQLite相比,Realm没有太多的教程和文档。该领域仍在积极发展中。 SQLite有更多的教程和文档。 总结 - 领域(realm) vs. sqlite公司(sqlite) Realm数据库是为移动应用开发快速且易于使用的解决方案的一个...

  • 发布于 2020-10-19 23:53
  • 阅读 ( 588 )

蟒蛇2(python 2)和三(3)的区别

...里有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日...

  • 发布于 2020-10-20 01:55
  • 阅读 ( 348 )

python(python)和c语言(c language)的区别

...。请在这里下载PDF版本Python和C语言的区别 引用 1.要点,教程。“C语言概述”,教程点,2017年11月1日。此处提供2.Point教程。“Python概述”,教程点,2017年10月5日。可在此处查阅3。“C与Python:比较”,Scribblings,2010年9月5日。可...

  • 发布于 2020-10-24 05:03
  • 阅读 ( 305 )

继承(inheritance)和java接口(interface in java)的区别

...请在这里下载PDF版本继承和Java接口的区别 引用 1.要点,教程。“Java继承”,教程点,2017年10月31日。此处提供2.Point教程。“Java接口”,教程点,2017年10月31日。此处提供2.要点,教程。“Java接口”, img.centered,.aligncenter{di...

  • 发布于 2020-10-25 00:02
  • 阅读 ( 496 )

要构建android应用程序,您需要学习以下7种编程语言

...第二活跃的语言,已经存在了20多年。所有这些都意味着教程是丰富的,你不必担心语言会很快消失。 ...

  • 发布于 2021-03-15 11:36
  • 阅读 ( 248 )

学习c#编程的7个实际原因

... 微软虚拟学院还提供C语言和Windows及移动设备开发的官方教程。Stack Overflow——可以说是编码人员最重要的网站——是用C语言编写的,所以它在网站上有一个巨大的社区也就不足为奇了。 ...

  • 发布于 2021-03-21 18:41
  • 阅读 ( 381 )
pn56672
pn56672

0 篇文章

相关推荐