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

前端之家收集整理的这篇文章主要介绍了再用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

原文链接:https://www.f2er.com/sqlite/200676.html

猜你在找的Sqlite相关文章