C C++中使用SQLite_3 数据库
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在C/C++中使用SQLite
廖卫东
C/C++接口
SQLite3.0依据以下需求而创建:
支持UTF-16。
用户可定义的文本排序。
以索引列的形式存储BLOB。
SQLite3.0的API包括了83个独立的函数。简单的程序可以通过三个函数工作:sqlite3_open()、sqlite3_exec()和
sqlite3_close()。
更多的数据库引擎运行控制可以用sqlite3_prepare()来编译一个SQLite语句成字节代码并通过sqlite3_step()来执行它。
一个用sqlite3_column_开头的命令序列可以用来提取关于查询结果的信息。许多接口函数是以UTF-8和UTF-16的形式成对出现的。并且有一个用于实现用户定义SQL函数和用户定义的text比较。
打开与关闭一个数据库
typedef struct sqlite3 sqlite3;
int sqlite3_open(const char*, sqlite3**);
int sqlite3_open16(const void*, sqlite3**);
int sqlite3_close(sqlite3*);
sqlite3_open()程序返回一个整型错误代码,而不是像sqlite2做的那样返回一个指向sqlite3结构。sqlite3_open()与
sqlite3_open16()间的区别是sqlite3_open16()采用UTF-16(以本地字节顺序)作为数据库文件名。如果一个新数据库文件需要被创建,那么sqlite3_open16()设置本地的文本表达式为UTF-16而sqlite3_open()设置文本表达式为UTF-8。
const char *sqlite3_errmsg(sqlite3*);
const void *sqlite3_errmsg16(sqlite3*);
int sqlite3_errcode(sqlite3*);
sqlite3_errcode()指令返回一个最近的主API调用的结果代码。sqlite3_errmsg()返回一个最近错误的
英文信息。错误码信息可能是暂时的-它可能在
接下来的任何SQLite函数调用时消失。
sqlite3_errmsg16()象sqlite3_errsmg()一样工作,除了它以本地字节顺序返回一个UTF-16错误信息。
SQLite 3 的错误代码
#define SQLITE_OK 0 /* 成功的结果*/
#define SQLITE_ERROR 1 /* SQL 错误或没有数据库*/
#define SQLITE_INTERNAL 2 /* 一个SQLite内部的逻辑错误*/
#define SQLITE_PERM 3 /* 存取许可被拒绝*/
#define SQLITE_ABORT 4 /* 需要一个中断的Callback指令*/
#define SQLITE_BUSY 5 /* 数据据库文件被锁定*/
#define SQLITE_LOCKED 6 /* 数据库中的一个表被锁定*/
#define SQLITE_NOMEM 7 /* malloc()失败*/
#define SQLITE_READONLY 8 /* 试图写一个只读的数据库*/
#define SQLITE_INTERRUPT 9 /* 操作被sqlite_interrupt()结束*/
#define SQLITE_IOERR 10 /* 某种磁盘I/O错误发生*/
#define SQLITE_CORRUPT 11 /* 数据库磁盘镜像异常*/
#define SQLITE_NOTFOUND 12 /* (Internal Only) 表或记录不存在*/
#define SQLITE_FULL 13 /* 数据库满插入失败*/
#define SQLITE_CANTOPEN 14 /* 不能打开数据库文件*/
#define SQLITE_PROTOCOL 15 /* 数据库错定协议错*/
#define SQLITE_EMPTY 16 /* (Internal Only)数据库表为空*/ #define SQLITE_SCHEMA 17 /* 数据库结构被改变*/
#define SQLITE_TOOBIG 18 /* 一个表的行数据过多*/
#define SQLITE_CONSTRAINT 19 /* 由于约束冲突而中止*/
#define SQLITE_MISMATCH 20 /* 数据类型不匹配*/
#define SQLITE_MISUSE 21 /* 库被不正确使用*/
#define SQLITE_NOLFS 22 /* 主机不支持的OS特性*/
#define SQLITE_AUTH 23 /* 授权被否定*/
#define SQLITE_ROW 100 /* sqlite_step()有另一行就绪*/ #define SQLITE_DONE 101 /* sqlite_step()已经完成执行*/
执行SQL语句
typedef int(*sqlite_callback)(void*,int,char**, char**);
int sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void*, char**);
第一个参数是一个打开的数据库
在第二个参数中给出的0或多个SQL语句被编译执行。查询结果被返回给Callback函数。在SQLite3中,sqlite3_exec()函数像包含一个预定义语句接口的调用的容器。
第三个参数是回调函数,不使用回调函数,该参数为0
第四个参数是回调函数的参数,如果没有参数,为0
第五个参数是返回的错误信息