SQLITE3中INSERT语句的注意事项

来源:互联网 发布:linux jdk 安装 编辑:程序博客网 时间:2024/06/17 11:58
  1. if(!(rv = sqlite3_open(szDbname, &db)))  
  2.     {         
  3.         sprintf(sql, "DELETE FROM problem_people WHERE fpid = %d;", m_iRecordID);  
  4.         GB2312_2_UTF8(buf, 512, sql, strlen(sql));  
  5.         rv = sqlite3_prepare(db, buf, strlen(buf), &stmt, NULL);  
  6.   
  7.         if((rv = sqlite3_step(stmt)) == SQLITE_DONE)  
  8.         {  
  9.             int iCount = m_listPerson.GetItemCount();  
  10.             for(int i = 0; i < iCount; ++ i)  
  11.             {  
  12.                 CString sName = m_listPerson.GetItemText(i, 0);  
  13.                 CString sScore = m_listPerson.GetItemText(i, 1);  
  14.                 CString sNo;  
  15.                 sNo.Format(L"%d", i + 1);  
  16.                 sprintf(sql, "INSERT INTO problem_people VALUES(?,%d,'%S','%S','%S',null,null);",   
  17.                     m_iRecordID, sNo, sName, sScore);  
  18.                 GB2312_2_UTF8(buf, 512, sql, strlen(sql));  
  19.                 rv = sqlite3_prepare(db, buf, strlen(buf), &stmt, NULL);      
  20.                 rv = sqlite3_step(stmt);  
  21.             }  
  22.         }  

SQLITE3的INSERT语句由于要插入数值,一般使用通配符'?',然后将每个问号和数据一一绑定。

如上例中,我们可以用

[cpp] view plaincopyprint?
  1. INSERT INTO problem_people VALUES(?,%d,?,?,?,null,null);"  

代替sprintf函数,而后使用sqlite3_bind_text等函数进行对应的绑定。

在原例中,由于插入数据为字符串,该字段需要用单引号括起,而在通配符例子中无需使用单引号。

值得注意的是,当字符串为数字时,sql语句会自动转换数字为字符串,也无需使用单引号。

如果你应该使用单引号,而没有写上去,sqlite会告诉你SQLITE3_MISUSE的错误。这说明sql语句有误。

还有最后一个问题。在原例中,我并没有将第一个问号匹配,这是因为sqlite中有一项默认规定,只要INTEGER字段作为主键,插入时将其设为?就能做到自增,这是一项挺方便的设定。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩手脚出汗多怎么办 小孩感冒出虚汗怎么办 宝宝感冒出冷汗怎么办 宝宝感冒睡觉出汗怎么办 宝宝感冒冒冷汗怎么办 宝宝感冒爱出汗怎么办 宝宝感冒老出汗怎么办 两只小鸡打架怎么办 老年人老是换保姆怎么办 孩子9不吃饭怎么办 两岁半宝宝不爱喝水怎么办 宝宝老是不吃饭怎么办 宝宝不爱吃饭喝水怎么办 小宝宝突然不爱吃饭怎么办 一岁多小宝宝不爱吃饭怎么办 宝宝肚子发撑怎么办 小宝宝咳嗽有痰怎么办 一岁小宝宝咳嗽怎么办 oppo连wifi超时怎么办 小孩不会写3怎么办 秘密花园黑色底怎么办 孩子说话不利索怎么办? 两岁半宝宝x腿怎么办 孩子低烧不退怎么办 小班迷眼了怎么办教案 玩呗麻将群老封怎么办 游戏玩不厉害怎么办 厕所太小洗衣机怎么办 洗衣机进水太小怎么办 油性笔干了怎么办 水笔写不出来怎么办 手机图案密码打不开怎么办 图案锁住了打不开怎么办 手机绘制图案打不开怎么办 小孩吃了润滑油怎么办 宝宝吃了润滑油怎么办 透明胶带撕不起怎么办 马克笔颜料没了怎么办 匡威鞋掉色了怎么办 补眉后颜色很淡怎么办 磨砂画出毛了怎么办