SQLite学习笔记(5)
核心C API: 查询封装: 连接与断开连接: 其实就是打开数据库。可以使用函数sqlite3_open_v2( )、 sqlite3_open( )、sqlite3_open16( )。其中sqlite3_open_v2( )函数功能最强大,也是最新的函数,尽量使用这个函数。 打开数据库函数声明: int sqlite3_open_v2(const char * filename,sqlite3 * ppDb,int flags,const char * zVfs);其中,filename数据库库文件名,ppDb数据库句柄,flag标志, zVFS是将使用的VFS文件名。若数据库文件不存在,且第三个参数包括SQLite_open _create标志,那么函数将打开一新数据库文件,如无SQLite_open _create标志否则返回 错误。flags包含向量SQLITE_OPEN_CREATE,SQLITE_OPEN_READONLY,SQLITE_OPEN_READWRITE。当以只读和读写模式打开数据库的时候,这两个选项都是要求 数据库文件已经存在,否则将返回错误,是传统的open。参数flags也可结合SQLITE_OPEN_NOMUTEX、SQLITE_OPEN_FULLMUTE、SQLITE_OPEN_SHAREDCACHE、 SQLITE_OPEN_PRIVATECACHE进一步控制数据库句柄的事务行为。参数zVFs允许调用去重写默认的操作系统接口sqlite3_vfs方法。
打开完成后,sqlite3_open_v2( )将初始化有参数ppDb传递给他的可称为隐式句柄的结构体,本句柄代表一个到数据库的连接。该连接可能附加了好多个数据库,代表事务上下文环境。 int sqlite3_open( const char * filename,sqlite3 * ppDb) ; int sqlite3_open( constvoid * filename,sqlite3 * ppDb) ; 关闭数据库函数声明: int sqlite3_close( sqlite3 *) ; 顺利关闭数据库的前提是完成与连接相关的所有查询,只要有一个没完成,就会返回 sqlite_busy 错误并且提示。若是连接上有打开的事务,事务自动回滚。 执行查询: 函数:sqlite3_exec(),称为便捷函数,封装了好多任务。 函数声明: int sqlite3_exec( sqlite *,const char * sql,sqlite_callback,void *data,char ** errmmsg) ; 其中 sqlite* 表示打开的数据库; sql 为执行的sql语句;callback回 调函数;void *data为回调函数的第一个参数指向提供给回调函数的应用程序特定的数据,也是回调函数的第一个参数; errmsg 为错误信息,是指向错误消息字符串的指针 。 sqlite_exec() 有两个错误消息来源,返回值和可读的字符串errmsg。
注意:如果提供 了errmsg,用来创建错误消息的内存是在堆上分布的。 故在调用后,应该检查一下是否为null值,如果有错误发生,使用sqlite3_free()释放errmsg占用的内存。
在简单命令中使用sqlite3_ exec( ),实例代码: int main(int argc,char ** argv) { sqlite3 *db; char *zErr ; nt rc ; char *sql; rc = sqlite3_open_v2( "test.db",&db); if( rc) { fprintf(stderr," Can't open database :%sn",sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } sql="create table episodes(id int,name text ) "; rc = sqlite3_exec(db,sql,NULL,&zErr ) ;
if(rc ! = SQLITE_OK){ if( zErr != NULL ) { fprintf( stderr," SQL error : %sn ",zErr); sqlite3_free(zErr) ; } }
sql = "insert into episodes values ( 10,'the dinner party ' )"; rc = sqlite3_exec(db,&zErr);
sqlite3_close(db) ; return 0 ; } 回调函数的声明: typedef int ( * sqlite3_callback ) (void *,int,char **,char ** );其中void *是为sqlite3_exec()第四个参数提供的数据,int代表字段的数目,char** 便是行中字段名称的字符串的数组,char**表示字段ing成的字符串数组。 sqlite3_exec( )允许执行一批命令,并可以通过回调接口收集所有的返回数据。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |