现在项目中遇到一个bug需要解决.语音服务更新多条数据到mysql数据库,但是只有自增ID最大的数据更新成功了.其他数据,全部更新失败.
语音服务采用了OTL作为数据库处理层.
1、bug描述如图1:更新uid=12373~12377,tb_User表只有只有12377更新字段User_GPSswitch成功。
2、为了排除语音服务的问题,按照服务的使用方法,重写了一份OTL更新数据库。经过测试,可以全部更新成功。
排除了语音服务使用OTL库错误的问题。
语音服务OTL使用代码如图2、图3。
3、测试程序更新到测试环境(bug复现的环境),发现问题复现了,问题定位到环境配置。
查看unixODBC版本,centos6.6默认yum安装了2.2.14。
而本机调试环境,版本为2.3.6.
查看unixODBC版本更新记录,有如下描述:
18.Nov.2008 2.2.13 Released
-
Remove the MySQL Driver, its woefully out of date now
因此,初步判断为版本问题。升级unixODBC到2.3.6,再次测试问题解决。
图 1
![](https://app.yinxiang.com/shard/s69/res/d44d9040-c873-4359-b695-8dfdae81dd1a/%E9%80%89%E5%8C%BA_027.png)
图 2
![](https://app.yinxiang.com/shard/s69/res/93cfab76-a303-4723-88b6-c75e3a94cc35/%E9%80%89%E5%8C%BA_028.png)
图 3
截图不完整,补充OTL语句如下:
otl_update_user.open(user_list.size(),"UPDATE tb_User SET User_Name=:f1<char[50]>, User_Password=:f2<char[50]>, User_AudioStatus=:f3<int>, User_GPSswitch=:f4<int>, User_GPSfrequency=:f5<int>, User_Type=:f6<int> WHERE User_ID=:f7<int>",*m_db);
![](https://app.yinxiang.com/shard/s69/res/1f8e33df-c794-4ac7-b3d1-eb9b74c38471/%E9%80%89%E5%8C%BA_029.png)