sqlite3 基本功能操作

<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);
}












                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值