日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:891日期:2023-04-05 14:55:56

前言

本文給大家展示的代碼實際上就是如何利用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 work
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE work (baodanhao text unique primary key , chudanriqi text,qudao text,lianxiren text,xiaoshou text,beibaorenxingming text,chufar
iqi text,baoxianpinpai text,baoxianjihua text,baoxianjine real,yongjinbilv real,jingbaofei real,huankuanfangshi text,haikuanjine real,huanku
anriqi text,shifouquane text,lirunbilv real,lirunjine real,huoliriqi text,fapiaojisong text,shifubaoxiangongsi text,beizhu text);

總結

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

標簽: SQLite
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品久久福利| 国产精品久久久免费| 亚洲精品进入| 美女日韩在线中文字幕| 香蕉国产精品| 99亚洲视频| 视频国产精品| 日韩一区精品| 亚洲精品极品| 国产精品久久亚洲不卡| 精品国产三区在线| 精品国产乱码久久久| 粉嫩av一区二区三区四区五区 | 日韩一区二区中文| 亚洲国产专区| 亚洲一区二区三区无吗| 日韩av中文字幕一区二区| 欧美91在线|欧美| 中文一区一区三区高中清不卡免费| 欧美精选视频一区二区| 香蕉视频成人在线观看| 国产精品对白久久久久粗| 91青青国产在线观看精品| 欧美日韩国产传媒| 91精品日本| 丝袜av一区| 在线综合欧美| 麻豆视频一区二区| 激情丁香综合| 欧美精品97| 在线亚洲精品| 久久精品国产一区二区| 美女精品网站| 精精国产xxxx视频在线野外| 视频一区中文字幕精品| 日韩久久视频| 国产精品一区免费在线| 一区在线免费观看| 水蜜桃久久夜色精品一区| 99riav1国产精品视频| 久久影院一区二区三区| 尤物在线精品| 在线看片福利| 国产欧美日韩免费观看| 中文不卡在线| 激情综合在线| 欧美xxxx中国| 久久成人av| 日本va欧美va欧美va精品| 国产模特精品视频久久久久| 日韩在线观看| 国产精品xx| 精品午夜久久| 久久久久黄色| 捆绑调教美女网站视频一区| 午夜视频一区二区在线观看| 91精品韩国| 不卡福利视频| 成人va天堂| 精品中文字幕一区二区三区av| 欧美天堂视频| 欧美日韩一区二区综合| 久久久久久久久丰满| 色吊丝一区二区| 欧美91视频| 丝袜美腿一区二区三区| 女人天堂亚洲aⅴ在线观看| 欧美性感美女一区二区| 欧美日韩国产一区二区三区不卡| 色88888久久久久久影院| 99久久99久久精品国产片果冰| 欧美日韩夜夜| 精品久久福利| 99热国内精品| 国产精品丝袜xxxxxxx| 日本中文字幕不卡| 一区二区国产在线| 久久精品72免费观看| 欧美精品导航| 日韩精品免费一区二区在线观看 | 欧美精品自拍| 日韩av一二三| 麻豆免费精品视频| 久久三级视频| 中文字幕日本一区| 久久中文字幕一区二区三区| 香蕉人人精品| 日本成人在线一区| 亚洲欧洲美洲av| 蜜臀av国产精品久久久久| 国产日韩一区| 久久久噜噜噜| 国产日本亚洲| 亚洲成人精选| 久久a爱视频| 国产精品丝袜xxxxxxx| 久久精品日韩欧美| 亚洲一区二区成人| 欧美国产三级| 爽好多水快深点欧美视频| 国产福利一区二区三区在线播放| 亚洲夜间福利| 高清精品久久| 日韩1区2区日韩1区2区| 久久久久久久久久久9不雅视频| 日本成人中文字幕| 精品一区免费| 日韩专区精品| 精品国产亚洲一区二区三区在线 | 在线天堂中文资源最新版| 狠狠干综合网| 亚洲国产欧美日本视频| 日韩精品视频网| 妖精视频成人观看www| 中文字幕高清在线播放| 91精品国产自产观看在线| 亚洲欧美一区在线| 91精品国产91久久久久久黑人| 精品免费视频| 久久久免费人体| 国产一精品一av一免费爽爽| 久久最新视频| 香蕉精品999视频一区二区| 激情婷婷亚洲| 亚洲神马久久| 蜜桃av在线播放| 亚洲天堂av影院| 高潮久久久久久久久久久久久久| 精品国产三区在线| 丁香婷婷久久| 97se综合| 亚洲成人精品| 久久大逼视频| 三级一区在线视频先锋| 日韩影院精彩在线| 中文字幕成人| 97久久亚洲| 老司机精品视频网| 视频福利一区| 丝袜亚洲精品中文字幕一区| 欧美日韩少妇| 日韩中文字幕一区二区高清99| 日本欧美在线看| 日本亚洲欧洲无免费码在线| 日韩成人午夜精品| 精品一区二区三区的国产在线观看 | 国产精品igao视频网网址不卡日韩 | 蜜桃视频一区二区三区 | 麻豆成人av在线| 国产美女高潮在线观看| 久久网站免费观看| 亚洲欧洲日韩精品在线| 国产日韩欧美中文在线| 老色鬼精品视频在线观看播放| 欧美成人a交片免费看| 欧美大黑bbbbbbbbb在线| 日韩国产欧美视频| 久久电影tv| 天堂俺去俺来也www久久婷婷| 国产精品国产三级在线观看| 婷婷激情一区| 亚洲天堂日韩在线| 国产精品videossex久久发布 | 欧美精品一二| 国产精品传媒麻豆hd| 日本综合字幕| 国产欧美日韩精品一区二区免费| 九九色在线视频| 国产欧美一区二区色老头| 好吊一区二区三区| 精品久久在线| 国产免费成人| 久久久五月天| 欧美极品一区二区三区| 久久性天堂网| 91成人精品视频| 免费一二一二在线视频| 国产亚洲精品美女久久| 1024精品久久久久久久久| 国产videos久久| 国产免费久久| 精品欧美一区二区三区在线观看| 亚洲一区成人| 欧美日韩亚洲一区在线观看| 国产亚洲观看| 成人台湾亚洲精品一区二区| 欧美精品福利| 激情久久一区二区| 日韩大片在线| 欧美91福利在线观看| 亚洲午夜国产成人| 国产精品久久久久久av公交车| 精品国产一区二| 99视频精品全部免费在线视频| 红桃视频国产一区| 日韩1区2区3区| 国产一区二区三区久久久久久久久| 国产精品美女久久久久久不卡| 免费日韩一区二区三区| 亚洲先锋成人|