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

 

 

简单界面:

 

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

 

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

 

  

你可能感兴趣的:(数据库)