首页 > 代码库 > 简单数据库数据导出工具总结笔记

简单数据库数据导出工具总结笔记

 

 

简单界面:

 

  

 

1. 左边用ListBox控件,添加一个控件变量m_lb,将数据从数据库导出,然后用m_lb.AddString()添加到ListBox中显示。

  在OnInitDialog()中加入。CDBBase是封装的mysql类,一开始从数据库导出的汉字显示乱码,因为数据库用的utf-8,而程序这边用的gbk,

后来加了pDBbase->DBexecute("SET NAMES ‘GB2312‘");显示正确。

获取ListBox中元素个数用m_lb.GetCount(),返回整数。

获取ListBox选中项用m_lb.GetCursel(),返回序号,从0开始,返回-1表示未选中。

// TODO: 在此添加额外的初始化代码
    pDBbase = new CDBBase();
    int nRet = pDBbase->DBconnect(SSF_DB_IP,SSF_DB_USER,SSF_DB_PWD,SSF_DB_NAME,NULL,SSF_DB_PORT);
    if (nRet == -1)
    {
        MessageBox("数据库连接失败!");
        return 0;
    }
    DB_RESULT result;
    DB_ROW    row;
    char sql[512];
    memset(sql, 0, SQL_MAX_SIZE);
    sprintf(sql, "select name from hosts where type = 1 \n");
            
    //设置字符集
    pDBbase->DBexecute("SET NAMES ‘GB2312‘");

    result = pDBbase->DBselectN(sql, 100);
    int nCount = 0;
    while (result != NULL)
    {
        if(NULL != (row = pDBbase->DBfetch(result)))
        {
            if(row[0] != NULL)
            {
                ItemName[nCount++] = row[0];
                m_lb.AddString(row[0]);
            }    
        }
        else
        {
            break;
        }
    }
    DBfree_result(result);

 

2. 日期控件(Date Time Picker)的使用。

  首先给两个日期控件添加两个控件变量,m_data和m_data_end。再定义两个CTime类变量,用来保存从控件上读取的时间。

      CTime time_begin,time_end;

      m_data.GetTime(time_begin);

  m_data_end.GetTime(time_end);

  这样,就获取了控件时间保存在两个CTime对象中。这里用到的是从1970年1月1日至今的秒数,用CTime类的成员方法GetTime();

  long long nTime_begin = time_begin.GetTime();
  long long nTime_end = time_end.GetTime();

  然后我们需要的是这一天的零点的秒数,所以需要减去当前时间秒数,

  long long todaytime = time_begin.GetHour()*3600 + time_begin.GetMinute()*60+time_begin.GetSecond();

     比如,如果选择的是2014/4/29日和2014/4/30日,那么开始的时刻为nTime_begin-todaytime,结束时刻为nTime_end-todaytime;

  另从数据库中导出的数据中时间戳是一个从1970年1月1日至今的秒数,要将它转化为正常年月日时间显示。

      用localtime函数将long long 型转化为tm 型,输出时"?:"用来控制小于10时的前面补0。

__int64 tt;
tt = atoi(row[0]);
tm * tmpoint = localtime(&tt);
OutputFile<<tmpoint->tm_year+1900<<"/"
<<tmpoint->tm_mon+1<<"/"<<tmpoint->tm_mday<<" "
<<(tmpoint->tm_hour <= 9 ? "0":"")<<tmpoint->tm_hour<<":"
<<(tmpoint->tm_min  <= 9 ? "0":"")<<tmpoint->tm_min<<":"
<<(tmpoint->tm_sec  <= 9 ? "0":"")<<tmpoint->tm_sec<<"\t";

 

3. 保存窗口的使用。

    CFileDialog对象构造函数参数中,第一个参数TRUE表示是“打开”对话框,FALSE表示为“另存为”对话框。第五个参数(LPCTSTR)_TEXT("*.txt")表示文件类型过滤器里只有"*.txt"类型。

     CString FilePathName;
        CFileDialog dlg(FALSE, //TRUE为OPEN对话框,FALSE为SAVE AS对话框
            "txt", 
            NULL,
            OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
            (LPCTSTR)_TEXT("*.txt"),
            NULL);
        if(dlg.DoModal()==IDOK)
        {
            FilePathName=dlg.GetPathName(); //文件名保存在了FilePathName里
        }
        else
        {
            return;
        }

 

4. 写入txt文件。

    ofstream OutputFile。

  用open()函数打开文件,操作完后要用close()函数关闭文件。  

  打开: OutputFile.open(FilePathName);

      写入:OutputFile<<"***********************************************\n";

      关闭:  OutputFile.close();

 

5. MYSQL封装类头文件

#pragma once
#ifndef  SSF_DBBASE_H
#define SSF_DBBASE_H

//#include "common.h"
#include <WinSock.h>

#define HAVE_MYSQL

#define    SSF_DB_OK    (0)
#define    SSF_DB_FAIL    (-1)
#define    SSF_DB_DOWN    (-2)

#define SSF_DB_IP     "localhost"
#define SSF_DB_USER   "***"
#define SSF_DB_PWD    "***"
#define SSF_DB_NAME   "***"
#define SSF_DB_PORT   3306

#define SSF_MAX_SQL_SIZE    262144    /* 256KB */
#define SQL_MAX_SIZE        512

#ifdef HAVE_MYSQL

#include "mysql.h"
#include "errmsg.h"
#include "mysqld_error.h"

#define    DB_HANDLE    MYSQL
#define    DB_RESULT    MYSQL_RES *
#define    DBfree_result    mysql_free_result
#define DB_ROW        MYSQL_ROW
#endif /* HAVE_MYSQL */


class CDBBase
{
public:
    CDBBase(void);
    ~CDBBase(void);

    int         DBexecute(const char *fmt);
    DB_RESULT    DBselectN(const char *query, const int n);
    DB_ROW        DBfetch(DB_RESULT result);
    void        DBclose(void);
    int            DBconnect(const char *host, const char *user, const char *password, const char *dbname, const char *dbsocket,const int port);
    void        DBrollback(void);
    int         DBselectCount(const char *tableName, const char* condition);
private:


protected:

public:
    MYSQL  *pConn;

};

#endif