【精品教程】C++ SQLite 3使用【1】

  • A+
所属分类:C/C++

翻译来源于:SQLite C tutorial

SQLite 数据库

SQLite是一个嵌入式关系数据库引擎。它的开发人员称其为一个独立的,无服务器的,零配置的和事务性的SQL数据库引擎。目前它非常受欢迎,代码的拷贝量达到了数亿次。 SQLite已经在Solaris 10和Mac OS,Android或在iPhone中使用。Qt4库内置了对SQLite以及Python和PHP的支持。许多流行的应用程序在内部使用SQLite,如Firefox,Google Chrome或Amarok。

SQLite 3 命令行

sqlite3工具是基于终端的SQLite库的前端。它以交互方式评估查询并以多种格式显示结果。它也可以在脚本中使用。它有自己的一套元命令,包括.tables.load.databases.dump 。想查看更多的命令,我们可以通过输入 .help 命令进行查看。

现在我们通过sqlite3命令去创建一个新的数据库:

我们通过在sqlite3命令后边跟上一个参数 test.db,意思就是创建一个 test.db 数据库,如果这个文件在我们磁盘上存在,那就打开,如果不存在,sqlite3会自动创建。

打开 test.db 数据库后,我们就可以通过命令: .tables 去查看 test.db 中的数据表。

通过命令 .exit 退出sqlite3工具。通过 ls 命令,我们可以看到,sqlite3的确帮我们创建了一个 test.db 的数据库。

动态演示效果图:

【精品教程】C++ SQLite 3使用【1】

 

下面我们开始今天的主题,用C/C++语言来调用SQLite 3的操作。

SQLite Version

在第一个示例代码中,我们将通过SQLite 3的API来获取SQLite数据库的版本信息。

version.c:

 

编译命令:

运行结果:

说明:<sqlite3.h>这个头文件定义了SQLite库提供给客户端程序的接口。它包含定义,函数原型和注释。它是SQLite API的权威来源。

在第二个示例中,我们将通过SQL查询,来获取SQLite的版本:

query_version.c:

 

我们可以看到,通过SQL查询和通过SQLite3的API接口查询到的结果是一致的。

说明

SQLITE_VERSION()查询用于获取SQLite库的版本

sqlite3结构定义了一个数据库句柄。每个打开的SQLite数据库都由一个数据库句柄表示。

sqlite3_stmt结构表示一个单独的SQL语句。

sqlite3_open()函数打开一个新的数据库连接。它的参数是数据库名称和数据库句柄。

这个 :memory: 是一个特殊的数据库名称,使用它可以打开内存数据库。

该函数的返回码指示数据库是否成功打开。连接成功建立时返回SQLITE_OK。

如果返回代码指示错误,我们将消息打印到控制台,关闭数据库句柄,并终止程序。sqlite3_errmsg()函数返回错误的描述。无论打开时是否发生错误,都应通过将数据库连接句柄传递给sqlite3_close()函数来释放与数据库连接句柄关联的资源。

在执行SQL语句之前,必须首先使用sqlite3_prepare *函数之一将其编译为字节码。(不推荐使用sqlite3_prepare()函数)。

sqlite3_prepare_v2()函数有五个参数:

  • 第一个参数是从sqlite3_open()函数获得的数据库句柄。
  • 第二个参数是要编译的SQL语句。
  • 第三个参数是以字节为单位测量的SQL语句的最大长度。传递-1会导致SQL字符串被读取到字符串结尾的第一个零终止符。根据文档,通过传递提供的SQL字符串的确切字节数可以获得一些小的性能优势。
  • 第四个参数是语句句柄。如果sqlite3_prepare_v2()成功运行,它将指向预编译语句。
  • 最后一个参数是指向SQL语句的未使用部分的指针。只有SQL字符串的第一条语句才被编译,所以参数指向的是未编译的内容。我们填写0,因为该参数对我们不重要。

成功时,sqlite3_prepare_v2()返回SQLITE_OK;否则返回错误代码。

这是sqlite3_prepare_v2()函数调用的错误处理代码。

sqlite3_step()运行SQL语句。 SQLITE_ROW返回码表示还有另一行准备好。我们的SQL语句只返回一行数据,所以我们只调用一次这个函数。

sqlite3_finalize()函数销毁准备好的语句对象。

sqlite3_close()函数关闭数据库连接。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  0   博主  0   引用   1

    来自外部的引用: 1

    • 【整理】C++ SQLite 3使用【1】 | 勤奋的小青蛙