亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQLite > 正文

SQLite3的綁定函數族使用與其注意事項詳解

2020-01-25 19:26:03
字體:
來源:轉載
供稿:網友

前言

本文給大家展示的代碼實際上就是如何利用Sqlite3的參數化機制做數據插入,也可以update操作,就看你怎么玩了,這里只列出代碼,然后說一些注意事項。

下面的代碼,有一個問題,插入后的東西一定是:

INSERT INTO "work" VALUES('鉿','鉿鉿鉿鉿鉿',NULL,NULL,NULL,NULL,'鉿鉿鉿鉿鉿',NULL,NULL,110.0,1.0,108.9,NULL,NULL,'鉿鉿鉿鉿鉿',NULL,NULL,NULL,'鉿鉿鉿鉿鉿',NULL,NULL,NULL);

看看有問題的代碼:

sqlite3_stmt *stmt; CString sql = "insert into work values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; int rc = sqlite3_prepare_v2(db, sql.GetString(), -1, &stmt, NULL); if(rc != SQLITE_OK) { MessageBox("sqlite3_prepare_v2 Failed!"); return; } count = 0; p_wnd = PrevWnd; while(count++ < ID_TOTALCOUNT) { CString DbStr;  p_wnd = CWnd::GetNextDlgTabItem(p_wnd, FALSE);  if(p_wnd == NULL) {  return; } p_wnd->GetWindowText(DbStr); do {  if(!DbStr.GetLength())  {  rc = sqlite3_bind_null(stmt, count);  break;  }  //日期相關  if( count == ID_CHUDANRIQI ||   count == ID_CHUFARIQI ||   count == ID_HUANKUANRIQI ||   count == ID_HUOLIRIQI)  {  CDateTimeCtrl *TimeCtl = (CDateTimeCtrl *)p_wnd;    CString time = DateTimeToString(*TimeCtl);  rc = sqlite3_bind_text(stmt, count, time.GetString(), time.GetLength(), SQLITE_STATIC);  break;  }  else  {  //金錢相關的處理real類型  if( count == ID_BAOXIANJINE ||    count == ID_YONGJINBILV ||    count == ID_JINGBAOFEI ||    count == ID_HUANKUANJINE ||    count == ID_LIRUNBILV ||    count == ID_LIRUNJINE)  {   double tMoney = 0.0;   int rtn = sscanf_s(DbStr.GetString(), "%lf", &tMoney);   ASSERT(rtn == 1);   rc = sqlite3_bind_double(stmt, count, tMoney);  }  else  {   char *str = (char *)DbStr.GetString();   int c = strlen(str);   int c1 = DbStr.GetLength();   rc = sqlite3_bind_text(stmt, count, DbStr.GetString(), -1/*DbStr.GetLength()*/, SQLITE_STATIC);  }  } }while(0); if(rc != SQLITE_OK) {  CString ErrStr = sqlite3_errstr(rc);  MessageBox(ErrStr);  return; } } rc = sqlite3_step(stmt);  if(rc != SQLITE_DONE) { if(rc == SQLITE_ERROR) {  CString DbErr;  DbErr.Format("Sql Insert failed, %s", sqlite3_errmsg(db));  MessageBox(DbErr); } else {  MessageBox("sqlite3_step Failed!"); }  } sqlite3_finalize(stmt);

為什么呢?

因為,sqlite3_bind_text綁定的text,需要在做:

rc = sqlite3_step(stmt); 

的時候統一提交,而上面的代碼使用的臨時變量,rc = sqlite3_step(stmt);的時候,早就不存在了。因此亂碼也是正常的。

修改如下:

sqlite3_stmt *stmt; CString sql = "insert into work values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; int rc = sqlite3_prepare_v2(db, sql.GetString(), -1, &stmt, NULL); if(rc != SQLITE_OK) { MessageBox("sqlite3_prepare_v2 Failed!"); return; } count = 0; p_wnd = PrevWnd; CString DbStr[ID_TOTALCOUNT + 1]; while(count++ < ID_TOTALCOUNT) { DbStr[count].Empty();  p_wnd = CWnd::GetNextDlgTabItem(p_wnd, FALSE);  if(p_wnd == NULL) {  return; } p_wnd->GetWindowText(DbStr[count]); do {  if(!DbStr[count].GetLength())  {  rc = sqlite3_bind_null(stmt, count);  break;  }  //日期相關  if( count == ID_CHUDANRIQI ||   count == ID_CHUFARIQI ||   count == ID_HUANKUANRIQI ||   count == ID_HUOLIRIQI)  {  CDateTimeCtrl *TimeCtl = (CDateTimeCtrl *)p_wnd;    CString time = DateTimeToString(*TimeCtl);  DbStr[count] = time;  rc = sqlite3_bind_text(stmt, count, time.GetString(), time.GetLength(), SQLITE_STATIC);  }  else  {  //金錢相關的處理real類型  if( count == ID_BAOXIANJINE ||    count == ID_YONGJINBILV ||    count == ID_JINGBAOFEI ||    count == ID_HUANKUANJINE ||    count == ID_LIRUNBILV ||    count == ID_LIRUNJINE)  {   double tMoney = 0.0;   int rtn = sscanf_s(DbStr[count].GetString(), "%lf", &tMoney);   ASSERT(rtn == 1);   rc = sqlite3_bind_double(stmt, count, tMoney);  }  else  {   rc = sqlite3_bind_text(stmt, count, DbStr[count].GetString(), DbStr[count].GetLength(), SQLITE_STATIC);  }  } }while(0); if(rc != SQLITE_OK) {  CString ErrStr = sqlite3_errstr(rc);  MessageBox(ErrStr);  return; } } rc = sqlite3_step(stmt);  if(rc != SQLITE_DONE) { if(rc == SQLITE_ERROR) {  CString DbErr;  DbErr.Format("Sql Insert failed, %s", sqlite3_errmsg(db));  MessageBox(DbErr); } else {  MessageBox("sqlite3_step Failed!"); }  } sqlite3_finalize(stmt);

附上數據庫創建的sql語法:

sqlite> .dump workPRAGMA foreign_keys=OFF;BEGIN TRANSACTION;CREATE TABLE work (baodanhao text unique primary key , chudanriqi text,qudao text,lianxiren text,xiaoshou text,beibaorenxingming text,chufariqi text,baoxianpinpai text,baoxianjihua text,baoxianjine real,yongjinbilv real,jingbaofei real,huankuanfangshi text,haikuanjine real,huankuanriqi text,shifouquane text,lirunbilv real,lirunjine real,huoliriqi text,fapiaojisong text,shifubaoxiangongsi text,beizhu text);

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到SQLite頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久av电影| 久久久久久久97| 91久久国产综合久久91精品网站| 久久久成人精品| 亚洲欧洲激情在线| 国产精品福利小视频| 成人女保姆的销魂服务| 日韩一区二区av| 日韩精品中文字幕在线| 国产一区二区三区久久精品| 国产视频亚洲视频| 国产精品免费观看在线| 国产亚洲精品久久久久动| 国产精品视频区| 欧美日韩亚洲一区二| 精品国产欧美一区二区三区成人| 亚洲最大av在线| 久久久999精品免费| 久久国产精品久久久久久| 一区二区三区 在线观看视| 日韩av不卡电影| 欧美人交a欧美精品| 欧美中文在线观看国产| 亚洲男人天堂视频| …久久精品99久久香蕉国产| 亚洲人成在线电影| 26uuu亚洲伊人春色| 亚洲一区二区中文| 操91在线视频| 欧美日产国产成人免费图片| 爽爽爽爽爽爽爽成人免费观看| 日韩av电影免费观看高清| 中文字幕日本精品| 亚洲free性xxxx护士白浆| 国产+成+人+亚洲欧洲| 国产精自产拍久久久久久| 91午夜理伦私人影院| 国产精品久久久久久五月尺| 国产国语videosex另类| 日本免费一区二区三区视频观看| 亚洲综合成人婷婷小说| 成人性生交xxxxx网站| 欧美日韩中文字幕在线| 国产+成+人+亚洲欧洲| 亚洲国产美女精品久久久久∴| 国产亚洲欧美日韩美女| 一区二区在线免费视频| 欧美成年人视频| 国产盗摄xxxx视频xxx69| 国产亚洲欧美日韩一区二区| 成人日韩在线电影| 91av在线播放| 少妇久久久久久| 在线观看国产欧美| 久久精品夜夜夜夜夜久久| 91沈先生作品| 亚洲二区在线播放视频| 国产精品揄拍500视频| 亚洲精品91美女久久久久久久| 国产精品久久久久久搜索| 国内成人精品一区| 国内精品久久久久| 欧美日韩国产在线| 欧美视频免费在线| 91精品国产色综合久久不卡98| 日韩国产在线播放| 国产精品www色诱视频| 国产精品v日韩精品| 国产日产亚洲精品| 538国产精品视频一区二区| 一区二区中文字幕| 久久精品中文字幕| 在线观看日韩视频| 久久99国产精品久久久久久久久| 久久香蕉国产线看观看网| 中文字幕日韩av综合精品| 久久99久久久久久久噜噜| 久久久久日韩精品久久久男男| 亚洲精品电影网在线观看| 久久成人这里只有精品| 91视频九色网站| 国产精品久久久久久久久粉嫩av| 久久国产加勒比精品无码| 中文字幕在线国产精品| 亚洲综合中文字幕在线| 日韩欧美中文免费| 亚洲精品综合精品自拍| 国产精品美腿一区在线看| 欧美性猛交xxxx乱大交3| 国产精品高潮在线| 国产在线拍偷自揄拍精品| 91精品国产自产在线观看永久| 欧美亚洲国产成人精品| 中文字幕亚洲情99在线| 亚洲欧美在线一区二区| 亚洲视频在线观看网站| 欧美亚洲在线视频| 日韩中文在线视频| 91在线高清视频| 久久精品国产精品亚洲| 国产精品18久久久久久麻辣| 久久综合免费视频影院| 91精品国产色综合久久不卡98| 91精品国产综合久久男男| 成人午夜激情免费视频| 疯狂蹂躏欧美一区二区精品| 亚洲国产精彩中文乱码av在线播放| 久久av在线播放| 92版电视剧仙鹤神针在线观看| 国产精品7m视频| 欧美性猛交xxxx黑人| 国产精品视频自拍| 国产精品久久久久久久av电影| 亚洲日韩欧美视频一区| 国产成人一区二区三区小说| 欧美极品少妇xxxxⅹ裸体艺术| 日韩精品在线第一页| 国产91热爆ts人妖在线| 欧美激情xxxx性bbbb| 久热精品视频在线免费观看| 九色成人免费视频| 久久视频免费在线播放| 亚洲欧美另类在线观看| 日韩精品极品在线观看| 中文字幕不卡在线视频极品| 97视频免费在线看| 5566日本婷婷色中文字幕97| 亚洲午夜性刺激影院| 日韩国产欧美精品一区二区三区| 神马国产精品影院av| 国产精品旅馆在线| 欧美性猛交xxxx乱大交极品| 国产网站欧美日韩免费精品在线观看| 精品久久香蕉国产线看观看gif| 97精品久久久中文字幕免费| 亚洲国产精品一区二区三区| 亚洲国内精品视频| 欧美激情视频三区| 91精品视频播放| 欧美亚洲国产视频小说| 性欧美xxxx视频在线观看| 国产成人av在线| 91久久国产精品91久久性色| 欧美风情在线观看| 亚洲男子天堂网| 91久久综合亚洲鲁鲁五月天| 91免费看国产| 91在线免费观看网站| 97色伦亚洲国产| 欧美性受xxxx黑人猛交| 色阁综合伊人av| 国产+成+人+亚洲欧洲| 久久久久久国产精品久久| 久久天天躁日日躁| 久久久久久18| 欧美一区在线直播| 国产国产精品人在线视| 欧美在线视频在线播放完整版免费观看| 韩日欧美一区二区| 国产偷国产偷亚洲清高网站| 亚洲精品美女久久久| 欧美韩日一区二区| 国产精品久久一区主播| 久久久久久久亚洲精品|