环境:activerecord 4.8 + oracle 12c
DbPro ds1 = Db.use("oracle"); String pid = "p10"; String sql_1 = "select * from XXX where p_id=?"; String sql_2 = "select * from XXX where p_id='"+pid+"' "; List<Record> list1 = ds1.find(sql_1,pid); List<Record> list2 = ds1.find(sql_2);
以上两种查询方式,获取的数据竟然不一样?拼接sql方式获取的是对的,占位符的形式反而不对。
已经反复测试,确实有这个情况。原因还没细查,先把问题抛出来。新版本还未测试是否有此问题。
补充一点:这是一个多数据源的环境
2020.8.4 上午:经过测试,跟多数据源没有关系。另外我个人使用p6spy插件将最终的执行sql打印出来,发现跟手动拼接的sql是一样的,但是查询结果还是不一样。
2020.8.4 下午:问题已解决。问题出现在p_id这个字段类型上,因为系统比较老了,一开始也没往这方面想,这个字段设计的竟然是char(4)类型!!!也不知道哪个猿设计的!改成varchar,一切正常。
最后感谢波总的耐心指导,^_^。