由于数据列太多(504列),无法加载到txt和excel中,而且操作起来不方便,因此这里直接从数据库中加载数据
另外,对于数据库中一些连接和操作的语句,这里也记录下来,以后用起来方便些。就不用去代码中找了。
1、连接数据库
在此之前,需要用odbc配置数据源,建立数据库,配置数据源即可。
CDataBase* m_pDataBase; //定义
m_pDataBase=new CDatabase(); //构造函数中
m_pDataBase->Close();//析构函数中
<span style="white-space:pre"> </span>delete m_pDataBase;
#include "afxdb.h" --数据库头文件不要忘记
BOOL CChangeIdeaApp::PrepareDataBase()
{
BOOL bRet;
TRY
{
bRet=m_pDataBase->Open(NULL,FALSE,FALSE,_T("ODBC;DSN=ZKDB"));//;UID=sa;PWD=psdmaes
}
CATCH_ALL(e)
{
char MsgError[255];
e->GetErrorMessage(MsgError,255);
AfxMessageBox(MsgError);
delete m_pDataBase;
return FALSE;
}
END_CATCH_ALL
if(!bRet)
{
AfxMessageBox(_T("连接失败!"));
delete m_pDataBase;
return FALSE;
}
}
这个例子是以前做的一个利用字库做idea的,这里重新拿出来
2、读取数据
这里是一个读取字库中记录的小程序,这里有一些随机读取的功能,可以用来做一般的模板使用
int row=GetProfileInt("字库","行数",2358);
int col=GetProfileInt("字库","列数",10);
CString OutContent="";
srand((int)time(0));
for(int i=0;i<4;i++)
{
int r=rand()%row;//随机取行和列
int c=rand()%col;
char GetName[100];
SDWORD cbName;
c++;
c++;
char ss[1024];
HSTMT hStmt;
RETCODE retcode;
sprintf(ss,"select * from ZkTable where ROW=%d",r);
if(SQLAllocStmt(m_pDataBase->m_hdbc,&hStmt)!=SQL_SUCCESS)
{
AfxMessageBox("SQLAllocStmt error !",MB_OK);
return FALSE;
}
retcode = SQLExecDirect(hStmt, (unsigned char *)ss, SQL_NTS);
if((retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO))
{
SQLFreeStmt(hStmt,SQL_DROP);
AfxMessageBox("SQLExecDirect Error",MB_OK);
return FALSE;
}
while(retcode==SQL_SUCCESS)
{
retcode = SQLFetch(hStmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
SQLGetData(hStmt, c, SQL_C_CHAR, &GetName[0], 256, &cbName); //c为第c列,从1开始,一些其他的格式见下表1
OutContent+=GetName;
break;
}
}
SQLFreeStmt(hStmt,SQL_DROP);
}
RecordContent=OutContent;
经过改进,完整的从数据库中读取数据成为矩阵的代码如下
功能:从数据库中读取50行数据,共504列到矩阵中。
对于这种矩阵类,我觉得还是很好用的,我应该掌握它。并让它成为自己的程序。
bool CMatrix::LoadDataFromBase()
{
CNNBPApp* pApp = (CNNBPApp*)AfxGetApp();
//设置矩阵的行列
m_nRow =50;
SetMatrixRowNumber(m_nRow);
m_nCol =504;
SetMatrixColNumber(m_nCol);
double GetValue;
SDWORD cbName;
char ss[1024];
CString OutContent="";
HSTMT hStmt;
RETCODE retcode;
sprintf(ss,"select * from aatest");
if(SQLAllocStmt(pApp->m_pDataBase->m_hdbc,&hStmt)!=SQL_SUCCESS)
{
AfxMessageBox("SQLAllocStmt error !",MB_OK);
return FALSE;
}
retcode = SQLExecDirect(hStmt, (unsigned char *)ss, SQL_NTS);
if((retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO))
{
SQLFreeStmt(hStmt,SQL_DROP);
AfxMessageBox("SQLExecDirect Error",MB_OK);
return FALSE;
}
int i=0;
while(retcode==SQL_SUCCESS)
{
retcode = SQLFetch(hStmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
for(int j=1;j<=504;j++)
{
SQLGetData(hStmt, j, SQL_C_DOUBLE, &GetValue, 256, &cbName);
m_pTMatrix [i][j-1] = GetValue;
}
}
i++;
if(i>=50)
break;
}
SQLFreeStmt(hStmt,SQL_DROP);
}
这里贴出来,以后找起来就方便了。
表1 格式大全来源http://www.cnblogs.com/zhenjing/
值 | SQL类型 | C类型 |
bit | SQL_BIT | SQL_C_BIT |
tinyint | SQL_TINYINT | SQL_C_STINYINT |
tinyint unsigned | SQL_TINYINT | SQL_C_UTINYINT |
bigint | SQL_BIGINT | SQL_C_SBIGINT |
bigint unsigned | SQL_BIGINT | SQL_C_UBIGINT |
long varbinary | SQL_LONGVARBINARY | SQL_C_BINARY |
blob | SQL_LONGVARBINARY | SQL_C_BINARY |
longblob | SQL_LONGVARBINARY | SQL_C_BINARY |
tinyblob | SQL_LONGVARBINARY | SQL_C_BINARY |
mediumblob | SQL_LONGVARBINARY | SQL_C_BINARY |
long varchar | SQL_LONGVARCHAR | SQL_C_CHAR |
text | SQL_LONGVARCHAR | SQL_C_CHAR |
mediumtext | SQL_LONGVARCHAR | SQL_C_CHAR |
char | SQL_CHAR | SQL_C_CHAR |
numeric | SQL_NUMERIC | SQL_C_CHAR |
decimal | SQL_DECIMAL | SQL_C_CHAR |
integer | SQL_INTEGER | SQL_C_SLONG |
integer unsigned | SQL_INTEGER | SQL_C_ULONG |
int | SQL_INTEGER | SQL_C_SLONG |
int unsigned | SQL_INTEGER | SQL_C_ULONG |
mediumint | SQL_INTEGER | SQL_C_SLONG |
mediumint unsigned | SQL_INTEGER | SQL_C_ULONG |
smallint | SQL_SMALLINT | SQL_C_SSHORT |
smallint unsigned | SQL_SMALLINT | SQL_C_USHORT |
real | SQL_FLOAT | SQL_C_DOUBLE |
double | SQL_FLOAT | SQL_C_DOUBLE |
float | SQL_REAL | SQL_C_FLOAT |
double precision | SQL_DOUBLE | SQL_C_DOUBLE |
date | SQL_DATE | SQL_C_DATE |
time | SQL_TIME | SQL_C_TIME |
year | SQL_SMALLINT | SQL_C_SHORT |
datetime | SQL_TIMESTAMP | SQL_C_TIMESTAMP |
timestamp | SQL_TIMESTAMP | SQL_C_TIMESTAMP |
text | SQL_VARCHAR | SQL_C_CHAR |
varchar | SQL_VARCHAR | SQL_C_CHAR |
enum | SQL_VARCHAR | SQL_C_CHAR |
set | SQL_VARCHAR | SQL_C_CHAR |
bit | SQL_CHAR | SQL_C_CHAR |
bool | SQL_CHAR | SQL_C_CHAR |