前端之家收集整理的这篇文章主要介绍了
SQLite3 C/C++ 开发接口简介,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
http://liufei-fir.iteye.com/blog/1171175
1.0 总览
sqlite3是sqlite一个全新的版本,它虽然是在sqlite 2.8.13的代码基础之上开发的,但是使用了和之前的版本不兼容的数据库格式和API. sqlite3是为了满足以下的需求而开发的:
支持UTF-16编码.
用户自定义的文本排序
方法.
可以对BLOBs字段建立索引.
因此为了
支持这些特性我改变了
数据库的格式,建立了一个与之前版本不兼容的3.0版. 至于其他的兼容性的改变,例如全新的API等等,都将在理论介绍之后向你说明,这样可以使你最快的一次性摆脱兼容性问题.
3.0版的和2.X版的API非常相似,但是有一些重要的改变需要注意. 所有API接口
函数和数据结构的前缀都由"
sqlite_"改为了"
sqlite3_". 这是为了避免同时使用
sqlite 2.X和
sqlite 3.0这两个版本的时候发生
链接冲突.
由于对于C语言应该用什么数据类型来存放UTF-16编码的字符串并没有一致的规范. 因此
sqlite使用了普通的void* 类型来指向UTF-16编码的字符串. 客户端使用过程中可以把void*映射成适合他们的系统的任何数据类型.
2.0 C/C++ 接口
sqlite 3.0一共有83个API
函数,此外还有一些数据结构和预定义(#defines). (完整的API介绍请参看另一份文档.) 不过你们可以放心,这些接口使用起来不会像它的
数量所暗示的那么复杂. 最简单的程序仍然使用三个
函数就可以完成:
sqlite3_open(),
sqlite3_exec(),和
sqlite3_close(). 要是想更好的控制
数据库引擎的执行,可以使用提供的
sqlite3_prepare()
函数把
sql语句编译成字节码,然后在使用
sqlite3_step()
函数来执行编译后的字节码. 以
sqlite3_column_开头的一组API
函数用来
获取查询结果集中的信息. 许多接口
函数都是成对出现的,同时有UTF-8和UTF-16两个版本. 并且提供了一组
函数用来执行
用户自定义的
sql函数和文本排序
函数.
2.1 如何打开
关闭数据库
- typedefstructsqlite3sqlite3;
- intsqlite3_open(constchar*,sqlite3**);
- intsqlite3_open16(constvoid*,87); font-weight:bold">intsqlite3_close(sqlite3*);
- char*sqlite3_errmsg(sqlite3*);
- void*sqlite3_errmsg16(sqlite3*);
- intsqlite3_errcode(sqlite3*);
sqlite3_open()
函数返回一个整数
错误代码,而不是像第二版中一样返回一个指向
sqlite3结构体的指针.
sqlite3_open() 和
sqlite3_open16() 的不同之处在于
sqlite3_open16() 使用UTF-16编码(使用本地主机字节顺序)传递
数据库文件名. 如果要创建新
数据库,
sqlite3_open16() 将内部文本转换为UTF-16编码,反之
sqlite3_open() 将文本转换为UTF-8编码.
打开或者创建
数据库的命令会被缓存,直到这个
数据库真正被
调用的时候才会被执行. 而且允许使用PRAGMA声明来设置如本地文本编码或默认内存
页面大小等选项和参数.
sqlite3_errcode() 通常用来
获取最近
调用的API接口返回的
错误代码.
sqlite3_errmsg() 则用来得到这些
错误代码所对应的
文字说明. 这些
错误信息将以 UTF-8 的编码返回,并且在下一次
调用任何
sqlite API
函数的时候被清除.
sqlite3_errmsg16() 和
sqlite3_errmsg() 大体上相同,除了返回的
错误信息将以 UTF-16 本机字节顺序编码.
sqlite3的
错误代码相比
sqlite2没有任何的改变,它们分别是:
#definesqlITE_OK0/*Successfulresult*/
#definesqlITE_ERROR1/*sqlerrorormissingdatabase*/
#definesqlITE_INTERNAL2/*Aninternallogicerrorinsqlite*/
#definesqlITE_PERM3/*Accesspermissiondenied*/
#definesqlITE_ABORT4/*Callbackroutinerequestedanabort*/
#definesqlITE_BUSY5/*Thedatabasefileislocked*/
#definesqlITE_LOCKED6/*Atableinthedatabaseislocked*/
#definesqlITE_NOMEM7/*Amalloc()Failed*/
#definesqlITE_READONLY8/*Attempttowriteareadonlydatabase*/
#definesqlITE_INTERRUPT9/*Operationterminatedbysqlite_interrupt()*/
#definesqlITE_IOERR10/*SomekindofdiskI/Oerroroccurred*/
#definesqlITE_CORRUPT11/*Thedatabasediskimageismalformed*/
#definesqlITE_NOTFOUND12/*(InternalOnly)Tableorrecordnotfound*/
#definesqlITE_FULL13/*InsertionFailedbecausedatabaseisfull*/
#definesqlITE_CANTOPEN14/*Unabletoopenthedatabasefile*/
#definesqlITE_PROTOCOL15/*Databaselockprotocolerror*/
#definesqlITE_EMPTY16/*(InternalOnly)Databasetableisempty*/
#definesqlITE_SCHEMA17/*Thedatabaseschemachanged*/
#definesqlITE_TOOBIG18/*Toomuchdataforonerowofatable*/
#definesqlITE_CONSTRAINT19/*Abortduetocontraintviolation*/
#definesqlITE_MISMATCH20/*Datatypemismatch*/
#definesqlITE_MISUSE21/*Libraryusedincorrectly*/
#definesqlITE_NOLFS22/*UsesOSfeaturesnotsupportedonhost*/
#definesqlITE_AUTH23/*Authorizationdenied*/
#definesqlITE_ROW100/*sqlite_step()hasanotherrowready*/
#definesqlITE_DONE101/*sqlite_step()hasfinishedexecuting*/
ite_callback,void*,sans-serif; font-size:14px; line-height:25.200000762939453px">
ite2中一样承担着很多的工作. 该
语句.
. 更多地信息可以查看API 参考.
语句接口封装起来使用的.