Oracle将某字段查询结果按自定义格式封装输出以及解拆操作

#include <afx.h>  
#include "CDBOperation.h"    
#include <iostream> 
#include <string>
#include <afxinet.h>  
#include <afxwin.h>  
#undef   UNICODE 
#define DATA_BUFSIZE 1024

typedef struct query_catalog{
	u_short cat_num;      //发送目录条数
	u_short cat_size;      //单个目录名大小
    char *delimiter;   //分隔符
	char cat_name[DATA_BUFSIZE];    //发送所有目录名称
} Q_CAT;
using namespace std;
void main( )  
{  
	CDBOperation dbObject;    
	CString sql;  
	bool bConn = dbObject.ConnToDB();    
	if (true == bConn)    
	{    
		cout<<"数据库连接成功...."<<endl;  

	}    
	_RecordsetPtr pRst=NULL;  //创建一个数据集智能指针  
	pRst.CreateInstance(__uuidof(Recordset));//初始化Recordset指针  
	char type;  
	while(true)  
	{  

		/*	char str[20];
		cout<<"请输入查询日期(例如:1990-1-1):"<<endl;
		cin.getline(str,20);
		CString tm1(str);*/
		//CTime tm = CTime::GetCurrentTime();//获取系统当前时间
		//CString tm_str=tm.Format("%Y-%m-%d  %H-%M-%S");

       //sql="insert into RECV_TABLE (SID,CONTENT,TIME) values ('S1111','北京大学',to_date('"+tm_str+"','yyyy-mm-dd hh24:mi:ss'))";
		sql= "select * from recv_table  rt WHERE (to_char(rt.time,'yyyy-mm-dd'))='2014-03-03' ";
		pRst = dbObject.ExecuteWithResSQL(sql);  
			if (NULL == pRst)    
			{    
				printf("查询数据出现错误!\n");
				break;   
			}    
			if (pRst->adoEOF)    
			{    
				pRst->Close();    
				printf("There is no records in this table...\n");
				break;    
			}    
/封装目录部分///
			_variant_t vTime;    int count=0;
			Q_CAT	q_cat;
			int n=0;
			CString mulu="";
			q_cat.delimiter = "--";
			if(!pRst->BOF)  
			{  
				pRst->MoveFirst();//记录集指针移动到查询结果集的最前面    	
			}  
			memset(q_cat.cat_name,0,DATA_BUFSIZE);
			while (!pRst->adoEOF)    
			{    
				count++;		
				vTime = pRst->GetCollect(_variant_t("TIME"));    	
				if(vTime.vt != VT_NULL)    
				{  
					cout<<(LPCTSTR)(_bstr_t)vTime<<endl;  
					mulu +=  (LPCTSTR)(_bstr_t)vTime;	
					mulu += q_cat.delimiter;	
				} 				
				pRst->MoveNext();    		
			}  
		   q_cat.cat_size = sizeof(vTime);
		   q_cat.cat_num = count;
		   strcpy(q_cat.cat_name,(LPCTSTR)mulu);
		   cout<<"catalogue's size: "<<q_cat.cat_size<<endl;
		   cout<<"catalogue's num: "<<q_cat.cat_num<<endl;
		   cout<<"catalogue's name: "<<q_cat.cat_name<<endl;

	拆解目录部分/
			 string part;
			 string str(q_cat.cat_name);
			 string::size_type pos, trunc_size; 
			 int delilen = strlen(q_cat.delimiter);
			 trunc_size= (q_cat.cat_size+delilen)*q_cat.cat_num;	
			while (str.find(q_cat.delimiter))
			{
				n++;
				pos = str.find(q_cat.delimiter);
				part = str.substr(0,pos);
				if (n < q_cat.cat_num)
				{
						str =  str.substr(pos+2,trunc_size);
				}else if (n == q_cat.cat_num)
				{
					   part = str.substr(0,pos);
						cout<<part<<endl;
						break;
				}			
				cout<<part<<endl;
			} 	
			if(cin.get() =='q')
			{
				exit(1);
			}
	}  

	system("PAUSE");  

}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值