从数据库读取数据训练神经网络

由于数据列太多(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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值