sqlite3 基本功能操作
发布时间:2020-12-12 20:02:00 所属栏目:百科 来源:网络整理
导读:pre name="code" class="cpp"//学了两天sqlite数据库的用法,总结下。/*打开一个数据库,如果已经存在直接打开,否则会创建一个*/1 int sqlite3_open(const char *filename,/*这个是数据库的文件名*/sqlite3 **ppDb/*要带回的数据库句柄*/);/*关闭句柄*/2)in
<pre name="code" class="cpp">//学了两天sqlite数据库的用法,总结下。 /*打开一个数据库,如果已经存在直接打开,否则会创建一个*/ 1 int sqlite3_open( const char *filename,/*这个是数据库的文件名*/ sqlite3 **ppDb/*要带回的数据库句柄*/ ); /*关闭句柄*/ 2)int sqlite3_close( sqlite3 *pDb /*关闭句柄*/ ); /*执行sql语句,并对结果的每一项都调用回调函数(如果回调函数存在的话)*/ 3)int sqlite3_exec( sqlite3 * pDb,/*数据库句柄*/ const char *sql,/*sql 语句*/ int (*callback)(void *,int,char **,char **),/*回调函数*/ void *argument,/*回调函数的参数*/ char **errmsg/*错误信息*/ ); 回调函数说明比如: int func( void *argument,/*这是sqlite3_exec的第4个参数*/ int colum,/*数据库的表项数目*/ char **column_value,/*数据库表项的值构成的数据*/ char ** column_name,/*数据库表项名称*/ ) /*将sql语句翻译成能被sqlite解释器执行的字节码*/ 4)int sqlite3_prepare_v2( sqlite3 *db,/*数据库文件句柄*/ const char *zSql,/*数据库命令*/ int nByte,/*数据库命令的长度 (如果为负值,则自动计算长度)*/ sqlite3_stmt **ppStmt,/*这个是特别需要的结构体 解释后的信息存储于此*/ const char **pzTail/*这个指针指向没有被翻译到的sql语句的地方*/ ); /*个人理解:这个函数时配合sqlite3_prepare_v2执行的语句,执行由sqlite3_prepare_*系列函数生成的结果,且执行是一条一条的执行的,就是说执行一次返回一个结果,如果 返回为 SQLITE3_ROW 则说明该次执行结果有效,直到返回SQLITE3_DOWN才说明遍历完成 */ 5)int sqlite3_step( sqlite3_stmt *pStmt /*由sqlite3_prepare_v2给出的参数*/ ); /*sqlite3_column_系列函数都是针对sqlite3_step执行后生成的结果的,对该结果进行处理*/ 6) /*返回一条结果的列数*/ int sqlite3_column_count( sqlite3_stmt *pStmt ); /*返回第N个列的名称*/ const char *sqlite3_column_name( sqlite3_stmt *pStmt,int N ) /*返回第iCol列所占的字节数*/ int sqlite3_column_bytes(sqlite3_stmt*,int iCol); /*返回第iCol列的那个整数(前提是你已经知道是整数)*/ int sqlite3_column_int(sqlite3_stmt*,int iCol); /*返回第iCol列的那个浮点数(前提是你已经知道是浮点数)*/ double sqlite3_column_double(sqlite3_stmt*,int iCol); /*通用,返回第iCol的数据空间的指针*/ const unsigned char *sqlite3_column_text(sqlite3_stmt*,int iCol); /* 说明:一般指令的执行就是如上的顺序: sqlite3_prepare_v2(); sqlite3_step(); sqilte3_column_* */ 7) /*注意释放结构体*/ sqlite3_finalize(sqlite3_stmt *pstat) //----------------------------------------------------------- 如上即可完成基本的 sqllite数据库的操作。 执行sql语句时,如上提供了两种: //方案一 sqlite3_exec() //方案二 sqlite3_prepare_v2() sqlite3_step() sqlite3_column_* sqlite3_finalize() 选择方案: 如果一条语句只有一个返回结果就用sqlite3_exec() 例如: drop table tablename ;//删除表 insert table ... //插入表 反之如果一个sql语句可能有多个结果使用方案二比较方便 例如: select * from tablename where name ='ok' ;//可能有多个ok 理由: 方案二能很方便对每一个结果进行处理。当然方案一也是可以的,但是得需要使用回调函数。 下面举例两种编程 //sqlite3_exec 每一条执行结果都会调用该函数进行处理 int func (void*myarg,int colum,char** column_value,char** column_name) { const unsigned char * value = column_value[0]; const unsigned char *msg = column_value[1]; ... return 0; } ok1() { sprintf(sql,"select * from table1 where sn = '123456789012' ;"); int column; rc = sqlite3_exec(m_db,sql,func,(void *)1,&strmsg); if(rc != SQLITE_OK){ sqlite3_free(strmsg); } } ok2() { sqlite3_stmt *pStmt; sqlite3_prepare_v2(m_db,-1,&pStmt,NULL); while((rc = sqlite3_step(pStmt)) == SQLITE_ROW){ int i = sqlite3_column_count(pStmt); const unsigned char * value = sqlite3_column_text(pStmt,0); const unsigned char *msg = sqlite3_column_text(pStmt,1); const unsigned char *ok = sqlite3_column_text(pStmt,2); } sqlite3_finalize(pStmt); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |