sqlite3的sql语句用法总结与SQLite生成.db-journal文件问题
这几天遇到了一个问题就是在insert以及update数据的时候,总是生成一个.db-journal文件,重新启动程序后,该文件消失,前面添加修改的数据没有成功保存。关于如何解决这个问题,网上也没有人给出详细答案,但经过几天的分析,试验,最后成功了。不知道对所有出现的这个问题都能应付的过来,解决的方法很简单,如下: 程序中使用了 sqlite3_stmt*stmt; 然后通过rc =sqlite3_prepare(db,sql,strlen(sql),&stmt,&tail);将sql语句解析到stmt中,然后对数据库操作完成之后,没有释放stmt,当我调用sqlite3_finalize(stmt);将stmt释放之后,上面的问题不在出现了。 对此sqlite中还有一对匹配的用法。如下: sqlite3_get_table( db,&azResult,&nrow,&ncolumn,&zErrMsg ); sqlite3_free_table( azResult ); 下面是一些sql语句的用法。 sprintf(sql,"INSERT INTO "Phonebook" VALUES((select min(ID)-1 from Phonebook where ID>1 and ID-1 not in (select ID from Phonebook)),'%s','%s');",p->list[1],p->list[2]); char sql1[100]; 上面是关于like匹配的用法,Username like '王%' 以及Username like '王_',%用来匹配任意字符,_用来匹配一个字符。而且还要注意的是,c语言中 %的转义方式是%%,而不是%。 上面一句话是从csdn上问的结果,插入的数据,是按照ID号从小的开始插入。也就是将中间的空缺补上。 #include <stdio.h> int main( void ) int rc; ///open(create) database ///create table //上面一句用来定义两个主键 ///create table2
sql = "INSERT INTO "Call_Record" VALUES('answered','Jack','15908079861',&zErrMsg ); sql = "INSERT INTO "Call_Record" VALUES('dialed','Merry','15908079863','Zjf','15908079864','Qcx','15908079865','MM','15908079866','JJ','15908079867','GG','15908079868','DD','15908079869','Father','15908079870',&zErrMsg ); sql = "INSERT INTO "Call_Record" VALUES('missed','Mather','15908079871',&zErrMsg ); ///insert database table two sql = "INSERT INTO "Phonebook" VALUES('Jack','15908079861');" ; sql = "INSERT INTO "Phonebook" VALUES('Merry','15908079863');" ; sql = "INSERT INTO "Phonebook" VALUES('Zjf','15908079864');" ; sql = "INSERT INTO "Phonebook" VALUES('Qcx','15908079865');" ; sql = "INSERT INTO "Phonebook" VALUES('MM','15908079866');" ; sql = "INSERT INTO "Phonebook" VALUES('JJ','15908079867');" ; sql = "INSERT INTO "Phonebook" VALUES('GG','15908079868');" ; sql = "INSERT INTO "Phonebook" VALUES('DD','15908079869');" ; sql = "INSERT INTO "Phonebook" VALUES('Father','15908079870');" ; sql = "INSERT INTO "Phonebook" VALUES('Mather','15908079871');" ; int nrow = 0,ncolumn = 0; ///select database //sql = "select * from Phonebook order by Username"; //默认为升序asc //sql = "select * from Phonebook order by Username desc"; //降序 //sql = "select * from Phonebook order by (case Username when "" then 'zzzzz' else Username end);"; //sql = "select * from Phonebook order by (case Username when null then 'zzzzz' else Username end);"; //上面一句是处理空值情况(null 与""),sqlserver默认空值为最小,使用case可以改变它查询的值。 ///select database ///update database
///close db } 另外一种查询获取列值的方法: int i,j,rc,ncols; ///about dababase select sqlite3_finalize(stmt);
http://hi.baidu.com/arise_xue/blog/item/56ec30ef9c28fde4cf1b3e9c.html/cmtid/56ec30ef244855e1cf1b3eff (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |