- 论坛徽章:
- 1
|
本帖最后由 umyspl 于 2010-09-08 15:51 编辑
这是查询- bool CPqRecordset::Each(uint32_t nRows, uint32_t nCol, void *value, SQL_RET_TYPE _type)const
- {
- if(status != IRS_ERR_OK)return false;
- char * tmp = PQgetvalue(pPQrlt,nRows,nCol);
- switch(_type)
- {
- case SQL_RET_INT8:
- case SQL_RET_UINT8:
- memcpy(value,(void*)tmp,sizeof(uint8_t));
- return true;
- case SQL_RET_UINT16:
- case SQL_RET_INT16:
- memcpy(value,(void*)tmp,sizeof(uint16_t));
- return true;
- case SQL_RET_INT32:
- case SQL_RET_UINT32:
- memcpy(value,(void*)tmp,sizeof(uint32_t));
- return true;
- case SQL_RET_INT64:
- case SQL_RET_UINT64:
- memcpy(value,(void*)tmp,sizeof(uint64_t));
- return true;
- case SQL_RET_DOUBLE:
- memcpy(value,(void*)tmp,sizeof(double));
- return true;
- case SQL_RET_FLOAT:
- memcpy(value,(void*)tmp,sizeof(float));
- return true;
- case SQL_RET_PPCHAR:
- *((void**)value) = (void*)tmp;
- return true;
- default:return false;
- }
- }
复制代码 测试代码- uint64_t user_id;
- char * user_name,*user_phone;
- cpqrs.Each(0, 0, &user_id, SQL_RET_UINT64);
- cpqrs.Each(0, 1, (void*)&user_name, SQL_RET_PPCHAR);
- cpqrs.Each(0, 2, (void*)&user_phone, SQL_RET_PPCHAR);
- std::cout<<"\n------------------------------------------------------\n";
- std::cout<<"-----uid:"<<user_id<<std::endl;
- std::cout<<"---uname:"<<user_name<<std::endl;
- std::cout<<"userphone:"<<user_phone<<std::endl;
- InitRowAr(line_0,3);
- std::cout<<"userId:"<<GetRowInt64(line_0,0)<<std::endl;
复制代码 结果- /** CDatabase Test Begin -----------------------------------------------------------**/
- PgDB->Query
- ------------------------------------------------------
- -----uid:14133329480791089
- ---uname:Virus
- userphone:13813813838
- userId:3055692486422439423
- -------------------------------------
复制代码 现在的问题是字符串都读对了。但是那个64位的bigint型的数值不对。什么地方有错么。
这边没经过什么处理。只有指针和指针类型强转。
memcpy之前我printf过了,结果跟那个:14133329480791089一样的。- 1423062;"Virus";"13813813838 ";"123456 ";0;9;0;1273644186;0;0;1;0;"''"
复制代码 这个是原数据。
那个uid应该==1423062
请熟悉的人指导下。谢谢。 |
|