JFinal 2.2 使用Oracle数据库时,非web应用,SQL参数绑定没有生效,将sql中的参数换成实际数值,可以返回正确结果,这是什么问题?
配置:Druid 最新版,ojdbc6驱动
dsOracle = new DruidPlugin(PropKit.get("oraJdbcUrl"),PropKit.get("oraUser"),PropKit.get("oraPassword")); dsOracle.setDriverClass("oracle.jdbc.driver.OracleDriver"); dsOracle.setMaxActive(5); dsOracle.setInitialSize(1); dsOracle.setMinIdle(1); dsOracle.setValidationQuery("select 1 FROM DUAL"); dsOracle.start(); ActiveRecordPlugin arpOra = new ActiveRecordPlugin("oracle", dsOracle); arpOra.setDialect(new OracleDialect()); arpOra.setContainerFactory(new CaseInsensitiveContainerFactory()); arpOra.setDevMode(PropKit.getBoolean("DevMode", false)); arpOra.setShowSql(PropKit.getBoolean("DevMode", false)); arpOra.start();
String sql = "SELECT * FROM flt.mitemb mib WHERE mib.bn=?"; List<Record> queryData = Db.use("oracle").find(sql, bns.getStr("bn").trim());
说明:
1、bns.getStr("bn").trim() 是从MySQL数据库读出的待查询数据,varchar类型;2、mib.bn字段是Oracle数据库的char类型;
如果使用参数,查询不到数据;如果将mib.bn=?换成具体数值,比如mib.bn='123456',就可以查询出数据,没报错,也不知道什么问题,请帮忙看看,谢谢。
补充:
刚做了测试,应该是判断参数类型的时候,java的string字符串绑定给Oracle的char类型字段,因为类型转换不一致,导致查询不出数据,那么问题是如何将string转换为char类型字段呢?
答案在这里:
http://blog.chinaunix.net/uid-276853-id-366493.html
解决办法:
Db.use("oracle").find(sql, StringUtils.rightPad(bns.getStr("pn").trim(), 24));
终于搞定了,留给同样问题的朋友参考。
StringUtils.rightPad 就不解释了
答案在这里:
JFinal通过SetObject赋值,自动映射类型,导致string和char类型不匹配。
解决办法:
Db.use("oracle").find(sql,StringUtils.rightPad(bns.getStr("pn").trim(),24))
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。