再用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; 未完待续 参考资料:http://www.cnblogs.com/kfqcome/archive/2011/06/27/2136999.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |