五月开心播播网_国内精品伊人久久久久影院对白_亚洲精品高清视频_国产精品激情_68精品久久久久久欧美_四虎免费av_97精品在线视频_欧美知名女优

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

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

瀏覽:840日期: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
相關文章:
川上优av一区二区线观看| 日韩免费电影在线观看| 国产吃瓜黑料一区二区| 日韩av中文字幕在线| 欧美黄色aaaa| 天堂在线观看一卡二卡三卡四卡| 欧美熟妇另类久久久久久多毛| 日韩中文字幕不卡视频| 亚洲人精品午夜| 蜜臀久久99精品久久久久宅男| 亚洲精品aⅴ| av在线导航| 男女羞羞电影免费观看| 美女视频一区二区三区在线| 日韩伦人妻无码| 日韩高清三级| 欧美色涩在线第一页| 国产黄人亚洲片| 日韩美女在线看免费观看| 两个人看的免费完整在线观看| 久草精品视频在线观看| 欧美综合天天夜夜久久| 国产午夜精品理论片在线| 亚洲丝袜一区在线| 蜜桃传媒麻豆第一区在线观看| 亚洲精品一区二区三区中文字幕 | 久久综合久久综合久久| 巨胸喷奶水www久久久免费动漫| 四虎影视最新网址| 深夜做爰性大片蜜桃| 国产91av视频在线观看| 91九色单男在线观看| 欧美大荫蒂xxx| 国产精品网站在线播放| 蜜桃av综合| 国产精品一区二区三区视频网站| xxxwww在线观看| 熟妇人妻无乱码中文字幕真矢织江| 国产嫩草一区二区三区在线观看 | 天天碰日日操| 国产永久免费| 亚洲狠狠婷婷综合久久蜜桃| 亚洲av色香蕉一区二区三区| 影音先锋在线国产| 国产真人真事毛片| 国产传媒免费在线观看| 在线精品一区二区三区| 五月天国产视频| 91在线视频成人| 97超碰国产精品女人人人爽 | 国产伦视频一区二区三区| 欧美激情一区二区三区高清视频| 精品久久久免费| 99在线精品免费视频九九视| 深夜福利久久| 国产伦精品一区二区三区免费优势| 国模冰冰炮一区二区| 日本不卡网站| 阿v视频在线观看| 在线观看成人影院| 日日爱夜夜操| av黄色在线看| www午夜视频| 六月丁香婷婷在线| 成人毛片视频网站| 久久综合色视频| 久久久久久久久久久久久国产精品| 日本大片免费看| 亚洲wwwav| 亚洲欧美日韩国产中文| 亚洲大胆人体视频| 亚洲视频一区二区在线观看| 久久麻豆一区二区| 久久伊99综合婷婷久久伊| 国产亚洲一区二区三区在线观看| 中文字幕乱码亚洲精品一区| 亚洲丝袜自拍清纯另类| 亚洲国产另类av| 在线观看中文字幕不卡| 欧美一二三区精品| 日韩精品中文字幕在线观看| 亚洲四色影视在线观看| 欧美激情a在线| 国产精品久久中文| 九9re精品视频在线观看re6| 欧美整片在线观看| 国产剧情日韩欧美| 国产视频不卡| 一级一片免费播放| 日本日本19xxxⅹhd乱影响| 天天综合网日韩| 亚洲天堂av免费在线观看| 不卡中文字幕在线| 亚洲一区二区蜜桃| 天堂v在线视频| 亚洲中文字幕无码一区二区三区| 国产区一区二区三区| 色播五月综合| 成人午夜免费在线| 黄色三级视频在线播放| 天美传媒免费在线观看| 手机av在线网站| 亚洲高潮女人毛茸茸| 国产人妻精品久久久久野外| 波多野结衣av在线免费观看| 久久久久久久伊人| 狠狠综合久久av一区二区| 日日干夜夜操| 毛片网站在线| 国产在线|日韩| 亚洲成人tv| 奇米777国产一区国产二区| 亚洲精品电影| 不卡的av电影在线观看| 精品中文av资源站在线观看| 国内精品福利| 亚洲乱码电影| 韩国一区二区视频| 蜜臀av一区二区在线观看| 国产亚洲短视频| 在线看一区二区| 欧美成人精品不卡视频在线观看| 欧美成人video| 国内精品模特av私拍在线观看| 国产精品视频免费观看| 波多野结衣家庭教师视频| 少妇一级黄色片| 超碰人人人人人人| 日本免费高清视频| 欧美性xxx| 亚洲人成在线影院| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲伦理网站| 一级片免费在线| 超碰在线中文字幕| 久久精品高清| 国产精品午夜久久| 亚洲性线免费观看视频成熟| 成人区精品一区二区| 精品日本一区二区三区| av污在线观看| 国产乡下妇女三片| 超碰在线播放97| 69日小视频在线观看| 日韩毛片免费看| 久久国产精品99久久人人澡| 成人网在线播放| 久久久久国色av免费看影院| 91精品国产综合久久国产大片| 日韩美女av在线免费观看| 妞干网在线视频观看| 欧美成人精品欧美一级乱黄| 九九爱在线视频观看免费视频| 日本18视频网站| 成人精品一区二区三区电影| 最新精品在线| 国产福利一区在线观看| 日韩欧美中文字幕一区| 91免费观看| www.18av.com| 丝袜美腿小色网| 日日干天夜夜| 91精品美女| 国产xxx精品视频大全| 亚洲综合精品一区二区| 免费高清在线观看免费| 欧美午夜视频| 欧美一区二区三区黄片| 97se在线视频| 外卖gayxxxxgay1| 亚洲一区三区在线观看| 看国产成人h片视频| 国产精品久久久久久久久鸭| 成人免费看的视频| 欧美色视频免费| 久久久久99精品成人片毛片| 欧美日韩国产经典色站一区二区三区| 欧美男男激情videos| 久久中文字幕人妻| 97婷婷涩涩精品一区| 日本伊人午夜精品| 中文字幕永久免费| 亚洲成a天堂v人片| 日本在线视频观看| 欧美精品手机在线| 欧美午夜寂寞| 日本aaa在线观看| 久久人人爽人人爽人人| 亚洲影院高清在线| 欧美激情一区二区在线| 超碰成人在线观看| 精品1区2区| 首页亚洲欧美制服丝腿| 日本五十路女优| 国产精品三级在线| 亚洲第一色在线| 午夜视频一区在线观看| 丁香激情综合五月| 999久久久国产精品| 性直播体位视频在线观看|