首页 > 代码库 > 简单数据库数据导出工具总结笔记
简单数据库数据导出工具总结笔记
简单界面:
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