精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品开源,禁止转载和任何形式的非法内容使用,违者必究
最近开发要用一个标志数据,就选择了mysql的BIT(1)数据类型,默认想着是整数类型的范畴,按整数数值来处理,结果不行,遇到了问题,这里整理给大家。
问题表现,用常用的办法获取到的字符是个方块,方块转布尔类型,根本转不了,值是错误的。普通的整数转换代码如下:
iusflw=atoi(rs1.get(i,3).c_str());
用上面的代码转换atoi转的是个方块,得不到数据库里的值,但是用mysql的客户端workbench正常没问题。
认真分析了取值用到的数组类型情况,用以下代码解决了问题:
if(rs1.get(i,6).size()>0) ipmflag=rs1.get(i,6)[0]; else ipmflag=0;
上面代码对应的mysql是phpstudy里mysql 5.5.38版本,其它版本是不是这样不太确定。
另外可以用CAST进行数据类型转换,比如:
cast(bit as UNSIGNED)
但这样写sql语句麻烦,不如直接用字段名方便,但改sql语句和改C++取值代码,看个人喜好,都可以解决问题。
整体代码如下:
ResultSet rs1;
swprintf(wcsql,_T("SELECT flag FROM configmotior where company='%s'"),scom);
char *psql=UnicodeToUtf8(wcsql);
mysql.execute(psql);
free(psql);
mysql.populate(rs1);
int itfl,ihfl,iusflw,ipmflag;
double dsal;
for(int i=0;i<rs1.countRows();i++)
{
suser=UTF82WCS(rs1.get(i,0).c_str());//by shw 20210308 害怕中文名
if(rs1.get(i,1).size()>0)
seuser=UTF82WCS(rs1.get(i,1).c_str());
else
seuser=_T("");
itfl=atoi(rs1.get(i,2).c_str());
iusflw=atoi(rs1.get(i,3).c_str());
ihfl=atoi(rs1.get(i,4).c_str());
dsal=atof(rs1.get(i,5).c_str());
if(rs1.get(i,6).size()>0)
ipmflag=rs1.get(i,6)[0];
else
ipmflag=0;
if(rs1.get(i,7).size()>0)
sdc=UTF82WCS(rs1.get(i,7).c_str());
else
sdc=_T("");
}
如果需要这一套开发环境,也可以联系我,VS2010,MFC,mysql连接库,构造连接字符串,连接,执行sql语句,返回结果。
想学习分析C++开发问题,解决问题,请关注我。