sqlite3 基本功能操作
2014-05-21 14:47
281 查看
<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,sql,-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); }
相关文章推荐
- Android SQLite数据库基本操作和收藏功能的实现例子
- SQLite3 数据库基本操作
- Android平台学习基础(2)-SQLite基本操作
- vba基本操作 -- 常用功能
- GridView 中点击行操作显示基本信息,类似查看的功能。
- sqlite之我见--简单介绍与基本操作
- 用WinForm,实现基本的功能操作
- 使用JAVA的开源API-JExcelAPI来操作Excel,实现基本的功能
- MongoCola使用教程 1 - MongoDB的基本操作和聚合功能
- android SQLite数据库基本操作示例
- windows下sqlite3的基本操作
- 第十二节--SQLite的基本操作的应用(一)
- android SQLite数据库基本操作示例
- Android-SQLite3基本操作指令集合
- ASP.NET实现Cookie功能的三个基本操作(写入,读取,删除)
- 高级字符驱动程序操作 -- 基本读写功能
- sqlite3 基本操作
- sqlite3 常用操作 sqlite 基本命令
- wince5.0 +SQlite 的基本操作
- Android SQLite基本操作