C C++中使用SQLite_3 数据库

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

第五个参数是返回的错误信息

相关文档
最新文档