关于sql查询中由于where id = ‘ ’ 造成报integer = character 错误
略带萌性的召唤兽 发布于98月前 6答/1576阅

在demo 或者元数据管理中,对单条数据进行修改保存时,会用到 where ID(或者hotel_id等等)= ''的条件语句,但是由于后面的值均加了 ' ' 符号,造成系统报错。 经过跟踪,目前确定是由于dialect.java中的fillstatement 方法对 paras参数一股脑的采用setobject 方法输入,没有做判断。(其实preparedstatement类还有setint,setstring,setblob等) 请问应该如何解决这样的问题?谢谢
[沙发] 波多野结衣
查看JFinal源码,PGSQL有一个专门的方言,应该在那里面!
最佳
[地板] 波多野结衣
你是Oracle数据库吗,如果是sql语法不兼容,可以自定义修改对应的方言来进行优化!
[地毯] 略带萌性的召唤兽
我用的是 pgsql 兼容性上我调整了 初始化的sql 和 bool类型数据兼容问题  目前大部分运行都正常 发现就这里提交参数时 转换不知道是哪儿做的 。。。
[4楼] 略带萌性的召唤兽
在preparedstatement 中使用setobject设置para 后 是在哪儿进行数据类型转换的?
[5楼] 略带萌性的召唤兽
 JFinal 的方言仅用于 Model 的 save()、update()、delete()、等等由框架生成 sql 的方法,而开发者自由传入的 sql 框架并不会干预,这通常是在使用 find()、query()、paginate() 之类需要传入 sql 的方法。

所以设置了 方言也没用。。

目前 PostgreSQL 匹配遇到的问题就是 在 使用 PreparedStatement 的时候 使用的是 setobject传递的参数值  但是。。。。。。  PostgreSQL在 8.3以后的 驱动中去掉了 默认类型匹配   也就是说  传递过去一定要有明确的类型 驱动不会自动转。。。。。  目前有个思路是在 dialect 类的 fillstatement中进行判断,但是不知道是否可行
[6楼] Jieven
如果方言DIY的默认方法里面没有地方可以干预,就只能在其它节点找地方干预了!或者加特殊判断
[7楼] 略带萌性的召唤兽
通过配置 pgsql的驱动设置来解决该问题,测试没问题。~~!
提交评论
嘿,我来帮你!