SQLite C/C++接口介绍(一)


SQLite CC++接口介绍


本文为SQLite C/C++接口的介绍。


早期版本的SQLite由于只支持5C/C++接口,故十分容易学习。随着SQLite功能的增长,新的C/C++接口随之加入,以至有超过200个不同的函数接口(API)。如此多的函数,会对新的使用者带来压力。幸运的是,大多数函数是十分专用的,不需要考虑。尽管有如此多的入口点,但核心的APIS仍然相当简单,易于编程。本文目的在于提供全部背景信息,以更容易理解SQLite是怎么样工作的。


另一篇独立的文档“TheSQLite C/C++ Interface”,描述了全部不同的SQLiteC/C++ APIs。一旦读者理解了SQLite工作的基本原理,该文档可作为参考指南。本文档只是作为介绍,并不是完整的,也不是权威的,SQLiteAPI参考。


1.0核心对象和接口


一个SQL数据库引擎的主要任务是执行SQL语句。为了达到该目的,开发者需要知道两个对象:


  • 数据库连接对象:sqlite3

  • 预置语句对象:sqlite3_stmt {SQLite引进了虚拟机器概念,参阅之,可以帮助理解预置语句对象。个人翻译为预置语句这个名词时,认为并不能贴切的传达本意。}


严格意义上来讲,预置语句对象并不是必须的了解。因为,可以使用sqlite3_exec sqlite3_get_table这样便利的封装接口。这些接口对预置语句对象进行封置,隐藏了预置语句对象。然而,充分利用SQLite,则需要理解预置语句对象。


数据库连接和预置语句对象由一个小型的C/C++接口函数集控制,列出如下:


  • sqlite3_open()

  • sqlite3_prepare()

  • sqlite3_step()

  • sqlite3_column()

  • sqlite3_finalize()

  • sqlite3_close()


上面列出的这六个C/C++接口函数和两个对象构成了SQLite的核心功能。开发者理解了他们,就有了用好SQLite的好基础。


注意:如上列出的函数只是概念上的,而不是实际的。这些列出的函数大都有不同的版本。如,上面只列出了sqlite3_open()这一个函数名,事实上有三个分开的函数以稍微不同的方式完成相同的功能。他们是sqlite3_open(), sqlite3_open16() sqlite3_open_v2()。列表中提到的函数sqlite3_column(),事实上并不存在该段程序。列中给出的函数sqlite3_column()代表着一族函数,这些函数可用于提取不同类型的列数据。


如下是这些核心接口作用的概述:


 


sqlite3_open()

 

该函数打开一个SQLite数据库文件,并建立连接,同时返回一个数据库连接对象。往往,一个应用调用的第一个SQLite API即为该函数。同时,该函数也是大多数其他SQLite API的先决条件。大多数SQLite API需要一个数据库连接对象的指针作为第一个参数同,同时这些SQLite API可以看作为数据库连接对象的成员函数,这些函数共同构建了数据库连接对象。

sqlite3_prepare()

 

该函数将SQL文本转换为预置语句对象,同时返回一个指向该对象的指针。该接口函数需要一个先前通过调用sqlite3_open()获得的数据库连接对象的指针以及将要进行转换的SQL语句字符串。该语句事实上并不执行SQL语句。它仅仅是为执行SQL语句做好准备。

假设每条SQL语句即为一个小计算程序。sqlite3_prepare()的目的是将这些程序编译成对象编码。预置语句即为对象编码。sqlite3_step()接口函数将执行对象编码以获得结果。

注意,对于新的应用,并不推荐使用sqlite3_prepare()。一个新的备选函数sqlite3_prepare_v2()用来替代它。

sqlite3_step()

 

该函数用来执行先前用sqlite3_prepare()接口创建的预置语句。该语句将执行,直到获得第一行结果。再次调用sqlite3_step()以获得下一行数据。持续调用sqlite3_step(),直到语句完成。若执行没有返回结果的语句(如,insert, update delete语句),只需要调用一次sqlite3_step()即可完成。

sqlite3_column()

该函数从被sqlite3_step()执行的预置语句的当前结果行获得一列数据。每次当sqlite3_step()执行后,通过多次调用该函数,以获得当前行的全部列数据。如上面提到,在SQLite API中并没有sqlite3_column()函数。对应的,我们在些称为sqlite3_column()指代的是一个整族的函数,这些函数从结果集中返回不同数据类型的结果。{请参阅SQLite的弱数据特性}。同时,也有一族的函数用来获得数据的大小(如果是字符串型和二进制大对象)和获得结果集中列的数目。

l sqlite3_column_blob()

l sqlite3_column_bytes()

l sqlite3_column_bytes16()

l sqlite3_column_count()

l sqlite3_column_double()

l sqlite3_column_int()

l sqlite3_column_int64()

l sqlite3_column_text()

l sqlite3_column_text16()

l sqlite3_column_type()

l sqlite3_column_value()

sqlite3_finalize()

 

该函数用于销毁(析构)之前由调用sqlite3_prepare()生成的预置语句对象。每个预置语句对象必须使用sqlite3_finalize()来销毁,以避免内存泄露。

sqlite3_close()

该语句用于关闭由先前调用sqlite3_open()打开的数据库连接。所有与对应连接有关联的预置语句必须在关闭连接前完成。


 


 


 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值