• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

            路漫漫,長修遠,我們不能沒有錢
            隨筆 - 173, 文章 - 0, 評論 - 257, 引用 - 0
            數據加載中……

            [導入]libsdb字段名的解決方案。自己分析sql語句中的select 字段名,自己維護

            這個不是一個很好的解決方案,浪費了很多內存空間,我覺得比較好的,方案應該是2個vector 
            一個用來存放一條記錄或字段名,另一個存放這個vector
            /**dbm.hpp
             * 數據庫操作的模塊,本系統中所有的數據庫操作都集成于本模塊
             * */

            #include
            <string>
            #include <map>
            #include
            <vector>
            #include "common.h"
            #include "sdb.h"

            using namespace std;
            typedef map<string, string> TRecord;
             typedef vector<string> Tcols;
             typedef vector<TRecord> TDataSet;
             typedef TRecord::iterator TDataSetIter;
             typedef TRecord::value_type TValueType;

             /* 本類不會主動關閉數據庫連接*/
            class TDB_Action{
              private:
             char* db; //數據庫連接
              TDataSet dataset; //結果集
            TDataSet *pd; //指向結果集的指針
            static Tcols record_cols; //字段元素

            /*回調函數
             *@param int n 字段個數
             *@param char **p 結果集
             *@param void * data 數據的出口
             */
             static int DB_record_callback(int n, char **p, void *data){
              if (!n) return 0;
              TRecord record;
              record.clear();
              for(int i = 0; i < n; i++){
             record.insert(TValueType( record_cols[i], p[i]));
              //printf("%s %s \t" , record_cols[i].c_str() ,p[i]);//
             } //printf("\n" );//
             ((TDataSet *)data)->push_back(record);
              }

             public:
             /*構造器*/
             TDB_Action(char* the_db){
             db=the_db;
             pd=&dataset;
             }

             /*析構器*/
              ~TDB_Action(){};

              /* 執行無結果集的sql語句
             * @param char *sqlstr sql語句
            */

             int DB_Excute( char *sqlstr);

              /*執行有結果集的sql語句
             * @param Tcols 一個vector,存儲多個字段
             * @param string table_name 表名
              * @param const condstion where條件
             * @return TDataSet 一個結果集*/

             TDataSet DB_GetRecord(Tcols the_cols, string table_name, const string condtion);

             };


            /*dbm.cpp*/
            #include "dbm.hpp"

             Tcols TDB_Action::record_cols; //類靜態成員變量需要在cpp中再申明一次,剛剛才知道d
             /*
             * */
             int TDB_Action::DB_Excute( char *sqlstr) {
             if (-1 == sdb_query(db, sqlstr, NULL, NULL)) {
             fprintf(stderr, "Error in Execute sql statement <%s>\n", sqlstr);
              return -1;
            }
             return 1;
             }

             TDataSet TDB_Action::DB_GetRecord(Tcols the_cols, string table_name, const string condtion){
             for(int i=0; i<dataset.size(); i++){
             dataset[i].clear();
             }
             dataset.clear();
             record_cols.clear();
             if (the_cols.size()<=0)
             return dataset;//如果沒有字段,直接返回
             char sqlstr[400] ;
             memset(sqlstr, '0', sizeof(sqlstr));
             string tmp(""); //構建一個sql語句

             for (int i =0; i < the_cols.size() ; i++ ){
             record_cols.push_back( the_cols[i].c_str());
             if( the_cols[i] == "*" )
             return dataset; //不能包含*

             if( i < the_cols.size() -1)
             tmp = tmp + the_cols[i] + ", ";
             else
             tmp = tmp + the_cols[i] ;
             }

              tmp = "Select " + tmp + " From " + table_name + condtion;
             sprintf(sqlstr, tmp.c_str());
             if (-1 == sdb_query(db, sqlstr, DB_record_callback, pd)) {
             fprintf(stderr, "Error in Query sql statement <%s>\n", sqlstr);
             return dataset;
             }
             return dataset;
             }

             int main(){//測試代碼
             char *db = NULL;
             char url[1024]="mysql:host=127.0.0.1:db=smscgw:uid=root";
             db=sdb_open(url);
             if (db == NULL) {
             fprintf(stderr, "Open database fault <%s>\n", url);
             exit (-1);
             }

             TDB_Action dba(db);
             Tcols te; string strs[5] = {"acttime","seq_num","msg","connname","mtmsg"};

             te.push_back(strs[0]);
             te.push_back(strs[1]);
             te.push_back(strs[2]);
             te.push_back(strs[3]);
             const string aaa(" ORDER BY acttime ");


             //取結果集
             TDataSet temp= dba.DB_GetRecord(te, strs[4],aaa);
             printf("打印結果集\n");
             for(int i=0 ; i < temp.size(); i++){
             for(TDataSetIter it=temp[i].begin();it != temp[i].end(); it++){
              printf("key:%s :%s \t", it->first.c_str(), it->second.c_str());
             }
             printf("\n");
             }
              if ( db!= NULL)
             sdb_close(db);
             return 0;
             }

            posted on 2006-01-12 09:56 Khan 閱讀(551) 評論(1)  編輯 收藏 引用 所屬分類: GCC/G++

            評論

            # re: [導入]libsdb字段名的解決方案。自己分析sql語句中的select 字段名,自己維護  回復  更多評論   

            vim的代碼著色真是一流,呵呵
            windows 下面也有GVim ,還可以生成 HTML
            2006-01-27 13:45 | 思春貼調查員(Khan)
            久久亚洲2019中文字幕| 久久亚洲精品人成综合网| 色综合久久综精品| 91精品国产91久久久久久蜜臀| 久久国产免费| 欧美一区二区久久精品| 精品久久久久久成人AV| 久久精品中文字幕一区| 久久天堂AV综合合色蜜桃网 | 久久无码高潮喷水| 99久久777色| 久久精品国产乱子伦| 国产精品青草久久久久福利99| 久久综合给合久久狠狠狠97色| 久久久噜噜噜久久| 亚洲国产成人久久综合碰碰动漫3d| 亚洲精品美女久久久久99小说| 国产精品久久久久久福利漫画 | 欧美日韩精品久久久久| 97热久久免费频精品99| 亚洲国产精品无码久久久不卡 | avtt天堂网久久精品| 久久久久久午夜精品| 亚洲精品乱码久久久久久蜜桃 | 亚洲va久久久久| 久久久久国产精品嫩草影院| 97r久久精品国产99国产精| 东方aⅴ免费观看久久av| 久久青青草视频| 中文字幕久久亚洲一区| 一97日本道伊人久久综合影院| 久久精品国产国产精品四凭| 国产综合精品久久亚洲| 国产精品免费久久| 久久婷婷五月综合成人D啪| 91精品国产色综久久| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 久久久久久久久久久久中文字幕| 伊人久久大香线蕉无码麻豆| 亚洲国产精品综合久久网络| 女人高潮久久久叫人喷水|