原文
前言,介绍
SQLite有超过225个api。然而,大多数api都是比较专业的,初学者可以忽略。经常用的API比较少,本文只要介绍常用的核心API。
下面的两个对象和八个方法组成了SQLite接口的基本元素:
1.两个对象
①sqlite3 数据库连接对象。由sqlite3_open()创建,由sqlite3_close()销毁。
②sqlite3_stmt 准备好的语句对象。由sqlite3_prepare()创建,由sqlite3_finalize()销毁。
2.八个方法
①sqlite3_open 打开一个连接到新的或现有的SQLite数据库。sqlite3的构造函数。
②sqlite3_prepare 将SQL语句编译成二进制代码,用于查询或者更新数据库。sqlite3_stmt的构造函数。
③sqlite3_bind 将应用程序数据存储到sqlite3_stmt。只会在更新数据库时候使用
④sqlite3_step 执行二进制代码sqlite3_stmt,或者对于同一个sqlite3_stmt执行下一次结果。
⑤sqlite3_column sqlite3_stmt当前结果行的列值。
⑥sqlite3_finalize sqlite3_stmt销毁。
⑦sqlite3_close() sqlite3销毁。
⑧sqlite3_exec() 对一条SQL语句一次执行sqlite3_prepare()、sqlite3_step()、sqlite3_column()和sqlite3_finalize()四步
一,核心函数介绍
SQL C/C++核心接口API有以下函数构成:
请注意,上面的例程列表是概念性的,而不是实际的。许多例程都有多个版本。例如,上面的列表显示了一个名为sqlite3_open()的例程,而实际上有三个独立的例程以略微不同的方式完成相同的事情:sqlite3_open()、sqlite3_open16()和sqlite3_open_v2()。列表中提到了sqlite3_column(),而实际上并不存这个函数。它表示的是一个获取列值的一个集合。
1.sqlite3_open 参考
sqlite3_open() UTF-8格式数据库
sqlite3_open16() UTF-16格式数据库
sqlite3_open_v2() UTF-8格式数据库,并且可以带打开参数:只读/读写/创建/内存库/多线程支持方式
2.sqlite3_prepare参考
sqlite3_prepare 别用,这个是遗留的兼容用的
sqlite3_prepare_v2 推荐使用
sqlite3_prepare_v3 比V2增加了一个控制参数
3.sqlite3_step参考
这个函数返回sqlite3_stmt的结果。如果是多行结果测需要重复调用,直到语句完成。不返回结果的语句(例如:INSERT、UPDATE或DELETE语句)只需要调用sqlite3_step()一次就可以了,返回值如下:
SQLITE_BUSY 表示数据库引擎无法获取完成其工作所需的数据库锁。需要等待
SQLITE_DONE 执行成功+无结果返回.在此情况下不能调用step。除非调用sqlite3_reset()将sqlite3_stmt重置回初始状态
SQLITE_ROW 如果正在执行的SQL语句返回任何数据,则在每次有新的数据行准备好供调用者处理时返回SQLITE_ROW。可以使用列访问函数访问这些值。再次调用Sqlite3_step()来检索下一行数据。
SQLITE_ERROR 可以通过调用sqlite3_errmsg()可以找到更多信息。。
SQLITE_MISUSE 表示这个例程调用不当。。
4.sqlite3_column_*参考
sqlite3_step()获取一行数据后,调用这个函数集获取某一列。。
sqlite3_column_blob 二进制
sqlite3_column_double double
sqlite3_column_int int
sqlite3_column_int64 int64
sqlite3_column_text UTF-8字符串
sqlite3_column_text16 UTF-16字符串
sqlite3_column_value 类型可变值
/**功能性****/
sqlite3_column_type 获取数据类型
sqlite3_column_bytes 获取二进制或者Ascii长度
sqlite3_column_bytes16 获取UTF-16长度
sqlite3_column_count 总的列数
5.sqlite3_finalize
这个例程销毁由先前调用sqlite3_prepare()创建的预处理语句。为了避免内存泄漏,必须使用对这个例程的调用来销毁每个准备好的语句。
6.sqlite3_close
这个例程关闭先前通过调用sqlite3_open()打开的数据库连接。在关闭连接之前,应该完成与连接相关的所有准备语句。
7.sqlite3_reset参考
sqlite3_reset() 将sqlite3_stmt恢复到初始状态(调用prepare后的状态),以便重新执行。通过使用 sqlite3_bind_*() 绑定的值不会清除。可以使用 sqlite3_clear_bindings() 来重置绑定。
二,典型用法
1.数据查询
如图所示这个是查询的完整流程,注意sqlite3_step可能返回 SQLITE_BUSY, SQLITE_DONE, SQLITE_ROW, SQLITE_ERROR, or SQLITE_MISUSE.只有ROW才表示有数据,BUSY表示数据正在忙碌需要等下.注意查询后的数据sqlite3_column_的开始索引是0
2.数据插入
注意一点sqlite3_bind_*开始索引是1
INSERT INTO:表的字段名字可以省略,这个时候Value的个数必须与table的列数一致