• <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 閱讀(545) 評論(1)  編輯 收藏 引用 所屬分類: GCC/G++

            評論

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

            vim的代碼著色真是一流,呵呵
            windows 下面也有GVim ,還可以生成 HTML
            2006-01-27 13:45 | 思春貼調查員(Khan)
            日日噜噜夜夜狠狠久久丁香五月| 中文字幕久久精品无码| 久久精品国产只有精品66| 久久久久99精品成人片牛牛影视| 日本久久中文字幕| 久久99国产综合精品女同| 久久久久九国产精品| 久久亚洲春色中文字幕久久久 | 久久免费精品视频| 亚洲国产精品无码久久九九| 国产产无码乱码精品久久鸭| 久久久综合香蕉尹人综合网| 久久久国产乱子伦精品作者| 国内精品欧美久久精品| 国产V综合V亚洲欧美久久| 人人妻久久人人澡人人爽人人精品 | 精品久久久久久成人AV| 狠狠色丁香久久婷婷综合蜜芽五月| 四虎国产精品免费久久5151| 亚洲av伊人久久综合密臀性色| 精品无码久久久久久久动漫| 久久精品99久久香蕉国产色戒| 中文精品99久久国产| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 97久久综合精品久久久综合| 亚洲精品无码专区久久久| 香蕉99久久国产综合精品宅男自 | 尹人香蕉久久99天天拍| 国产成人精品久久| 色综合久久中文综合网| 亚洲国产精品人久久| 久久成人精品视频| 精品久久一区二区| 亚洲乱亚洲乱淫久久| 久久青青草原国产精品免费| 久久精品国产久精国产| 婷婷综合久久狠狠色99h| 一本久久久久久久| 国产精品免费久久| 一本久久免费视频| 久久精品国产亚洲av麻豆色欲|