本系列文章主要是使用C++语言来调用其API,达到管中窥豹的目的。另外本文使用的开发环境为mac + clion,并且基于SQLite 3.7.14来进行开发.

  一、去下载sqlite-amalgamation-3071400.zip,然后解压到文件夹(其结构目录树如下):

    .

    ├── shell.c

    ├── sqlite3.c

    ├── sqlite3.h

    └── sqlite3ext.h

  二、新建一个sql_tutorial的工程,景sqlite3.c和sqlite3.h文件拷贝到sql_src目录下:

    .

    ├── main.cpp

    └── sql_src

    ├── sqlite3.c

    └── sqlite3.h

  

  三、在main.cpp中调用sqlite的代码如下:

    

/**
* We get the version of the SQLite database. This time we will use an SQL query.
*/
#include <iostream>
#include "./sql_src/sqlite3.h" using namespace std; int main() {
sqlite3 *db;
sqlite3_stmt *res; const char *file = "test.db";
int rc = sqlite3_open(file, &db); if (rc != SQLITE_OK) {
cout << "Cannot open database: " << sqlite3_errmsg(db) << endl;
sqlite3_close(db); exit();
} rc = sqlite3_prepare_v2(db, "SELECT SQLITE_VERSION()", -, &res, );
if (rc != SQLITE_OK) {
cout << "Failed to fetch data: " << sqlite3_errmsg(db) << endl;
sqlite3_close(db);
exit();
} rc = sqlite3_step(res); if (rc == SQLITE_ROW) {
cout << sqlite3_column_text(res, ) << endl;
} sqlite3_finalize(res);
sqlite3_close(db);
return ;
}

  四、最后的运行结果如下:

  

3.7.

Process finished with exit code 

  

  调用分析:

sqlite3 *db;

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

sqlite3_stmt *res;

  2、该sqlite3_stmt结构代表一个SQL语句。

int rc = sqlite3_open(file, &db);

  3、该sqlite3_open()函数打开一个新的数据库连接。其参数是数据库名称和数据库句柄。在“test.db的”是采用了特殊的数据库名称导致打开一个内存数据库。函数的返回码指示数据库是否被成功打开。当连接成功建立,则返回SQLITE_OK。

if (rc != SQLITE_OK) {
cout << "Cannot open database: " << sqlite3_errmsg(db) << endl;
sqlite3_close(db); exit();
}

  4、如果返回代码指示错误,我们打印邮件到控制台,关闭数据库处理,并终止该计划。该sqlite3_errmsg()函数返回错误的描述。它是否被打开时发生错误,与数据库连接句柄相关联的资源,应通过使其向sqlite3_close()函数释放。

rc = sqlite3_prepare_v2(db, "SELECT SQLITE_VERSION()", -, &res, );
if (rc != SQLITE_OK) {
cout << "Failed to fetch data: " << sqlite3_errmsg(db) << endl;
sqlite3_close(db);
exit();
}

  5、执行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;否则错误代码返回

  

rc = sqlite3_step(res);

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

  

sqlite3_finalize(res);

  7、该sqlite3_finalize()函数销毁准备语句对象。

sqlite3_close(db);

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

  

[原]SQLite的学习系列之获取数据库版本二的更多相关文章

  1. [原]SQLite的学习系列之获取数据库版本

    最先了解到SQLite是基于其作为移动客户端数据存储平台,以下是其官网(https://www.sqlite.org/)关于SQLite的一段介绍: SQLite是遵守ACID的轻型数据库引擎,它包含 ...

  2. [python][django学习篇][5]选择数据库版本(默认SQLite3) 与操作数据库

    推荐学习博客:http://zmrenwu.com/post/6/ 选择数据库版本(SQLite3) 如果想选择MySQL等版本数据库,请先安装MySQL并且安装python mysql驱动,这里不做 ...

  3. Django学习路14_获取数据库中用户名字并展示,获取指定条数

    在 views.py 中添加 获取函数 注:此时获取的是全部用户的信息 def get_users(request): users = User.objects.all() context = { ' ...

  4. 【SQL Server 学习系列】-- 获取字符串中出现某字符的次数及字符某次出现的下标

    ) = '1_BB_CC_DD_AA_EE_YY_WW_HH_GG' --// 1. 获取下划线在字符串中出现的次数 SELECT LEN(@Str) - LEN(REPLACE(@Str, '_', ...

  5. 【SQL Server 学习系列】-- 收缩数据库文件大小

    USE WebExam; GO ALTER DATABASE WebExam SET RECOVERY SIMPLE; GO -- 收缩文件到 1 MB. ); GO ALTER DATABASE W ...

  6. Python学习(十七)—— 数据库(二)

    转载自http://www.cnblogs.com/linhaifeng/articles/7356064.html 一. 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中, ...

  7. Linux学习系列之Linux入门(二)Vim学习

    第二篇 Vim学习 主要内容: 基本命令: 插件扩展: 参考资料: vim是一个命令控制的文本编辑器,可以完成几乎我们想要做的所有工作,除了Emacs几乎没有其他的工具能和它匹敌.官方网站是:http ...

  8. Git学习系列之集中式版本控制系统vs分布式版本控制系统

    不多说,直接上干货! Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中存放在中央 ...

  9. CSS3学习系列之盒样式(二)

    text-overflow属性 当通过把overflow属性的属性值设定为"hidden"的方法,将盒中容纳不下的内容隐藏起来时,如果使用text-overflow属性,可以在盒的 ...

随机推荐

  1. 在Mac OS上安装Vagrant和Docker的教程

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/128.html?1455808640 当听到很多人在说Docker是多么多 ...

  2. 【Linux高级驱动】LCD驱动框架分析

    1.framebuffer接口层(fbmem.c) 功能:给用户提供接口 fbmem_init  ),"fb",&fb_fops)  /*2.创建一个设备类*/ fb_cl ...

  3. paip兼容windows与linux的java类根目录路径的方法

    paip兼容windows与linux的java类根目录路径的方法 1.只有 pathx.class.getResource("")或者pathx.class.getResourc ...

  4. HTML+CSS纯干货就业前基础到精通系统学习2016/9/3

    1:HTML纯干货学习后的达到的效果 (1):会使用HTML的基本结构,创建网页 (2):会使用文本字体相关标签,实现文字修饰和布局 (3):会使用图像.超链接相关标签,实现图文并茂的页面 (4):会 ...

  5. linux开发神器--Tmux

    在Linux上工作的朋友,可能会常常遇到这种情况: 痛点1: 在公司用putty连着Linux开发机,程序正跑着,不知不觉到了下班的时候,要和老婆/女朋友约会了,但是程序还没跑完,并且进度有点紧,还得 ...

  6. jsp实现验证码

    在web开发领域里面,验证码是一个比较常见的功能,而归根到底,验证码其实就是一组随机数,或者是一个随机算术 一.基本知识 1.为什么需要验证码? 验证码,很多时候出现在注册页面或者登陆界面,在这些页面 ...

  7. UHF桌面式发卡器

    UHF桌面式发卡器: http://www.rr-rfid.com/index.php/pro_view/95  本文用菊子曰发布

  8. 【最新图文教程】WinCE5.0中文模拟器SDK(VS2008)的配置

    http://www.blogbus.com/antiblood-logs/204402631.html 经过几天的查找,终于找到了一篇文章是讲VS2008 怎么集成wince5.0 的模拟器的,这里 ...

  9. Why GUID primary keys are a database’s worst nightmare

    http://csharptest.net/1250/why-guid-primary-keys-are-a-databases-worst-nightmare/ When you ask most ...

  10. 关于stacking context和CSS z-index的总结

    HTML中决定元素叠加顺序的CSS属性最有名的应该是z-index了.但是,往往在项目中发现有些情况和我们的预期不太一致.经过研究和学习,总算搞清楚了其中的关系.简单总结如下: 只有Positione ...