再用Sqlite3 之学习新解,新感悟

之前为了使用Sqlite找了好多资料,最后发现都不尽人意,起初为了让能够把select * from table所有数据显示在list上,结果费了好大的功夫,最开始用回掉函数,但是它必须用static声明,这就产生了非常大的麻烦。花了一下午结果就是未果。放弃了,换了第二种方法,sqlite3_get_table;

这种方法虽然很麻烦,但是当时确实是实实在在的解决了我的问题。

昨天在想一个问题,为什么我每操作一次数据库都要有打开关闭的操作,我在想是不是应该在程序启动时打开,结束时关闭呢?

然后把自己写好风装好的MySqlite类给大改了一番,f5调试的时候是一点问题都没有的,一切正常,但是在生成后在dubug目录下双击运行时却出现了莫名其妙的错误,我把代码一段段注释掉,最后发现问题出在m_list.SetItemText(i,j,sql.m_data[(i+1)*(sql.m_col)+j+1]);这句话上

这句话还是敏思苦想了好久才想到的办法,因为表中第一列是id,我觉得没用,就想了各种方法去把他屏蔽掉。无奈知识面有限,不知道有没有更简单的办法。

说多了,总之就是上面这句代码出的问题,把它屏蔽掉之后再试就正常。不知道这是什么情况,如果说是下标越界的话早在f5的时候应该就暴漏出来了才对,但是这问题,,我还是不知道怎么回事。

	sqlite3 *db = NULL;
	sqlite3_stmt *stmt;
	sqlite3_open("xx.db",&db);
	char * errMsg = NULL;
	sqlite3_prepare(db,"select * from table;",-1,&stmt,0);
	int rc = sqlite3_step(stmt);
	while(rc == SQLITE_ROW){
		CString type = sqlite3_column_text(stmt,0);
		CString name = sqlite3_column_text(stmt,1);
		rc = sqlite3_step(stmt);
	}
	sqlite3_finalize(stmt);
	sqlite3_close(db);

这段代码就是刚查资料后找到的,原来相应的借口函数sqlite3也是有提供的,使用这个更好些。

目前正在研究每个接口函数的参数及使用方法

 

sqlite3_step执行后返回的结果, 如果是update, delete, insert等语句,正常应该返回 SQLITE_DONE ;如果是select语句,且有还有记录,则应该返回SQLITE_ROW;
sqlite3_prepare,它用来准备一条语句,存放在sqlite3_stmt上,step可以理解为单步执行,sqlite3_exec其实就是对sqlite3_prepare_v2sqlite3_step()sqlite3_finalize()的封装

 

 

未完待续

参考资料:http://www.cnblogs.com/kfqcome/archive/2011/06/27/2136999.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值