mysql用C开发获取bit类型字段值方法
背景
最近开发要用一个标志数据,就选择了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;i0) 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++开发问题,解决问题,请关注我。