完全相同的项目,相同的config,相同的sql代码,在用oracle数据库不会报错,用c3p0也不会报错,只有同时使用druid和informix时才报这个异常
只要涉及到informix数据库访问就报这个异常[ERROR]-[Thread: http-nio-8080-exec-10]-[com.alibaba.druid.pool.DruidDataSource.init()]: init datasource error
java.sql.SQLException: A syntax error has occurred.
@Jfinal 波总求指教!万分感谢
<p>感谢波总,问题已解决。我去查了相关的druid源代码包,原来是validateQuery的验证语句出了问题,informix是不支持select 1的,而druid默认的并不适用informix。后来看了Jfinal连接池方法,加一句druidPlugin.setValidationQuery("select first 1 1 from systables");就搞定了,jfinal真心强大!<a class="referer" target="_blank">@JFinal</a> </p>
把你的这条回复设置为最佳答案,会被置顶。 这样后来人在碰到这个问题就可以快速解决掉了
<p><a class="referer" target="_blank">@JFinal</a> </p>
<p>得配置 informix 的方言,但 jfinal 默认是没有提供 informix 的方言的,你可以参考 AnsiSqlDialect 写一个 InforMixDialect,然后配置一下:</p>
activeRecordPlugin.setDialect(new InformixDialect());
如果懒得写这个方言, 可以先使用 AnsiSqlDialect 用一下,这个方言支持所有符合 ANSI Sql 标准的数据库。还有一个办法是在网上搜索一下针对 jfinal 写的 informix 的方言,我记得有人写过并开源了
<p>波总,我就是一直用AnsiSqlDialect来连接informix数据库的,在c3p0连接池没有任何问题,为什么换了druid就会出错呢? <a class="referer" target="_blank">@JFinal</a> </p>
回复 <a class="referer" target="_blank">@风逸灬杰</a> : jfinal 仅仅是直接将 sql 与参数扔给 druid或c3p0而已,绝对没有区别对待。 你提到 spring 支持,那么看一下spring下用的哪个druid版本,在jfinal下也换成这个版本即可
奇怪就奇怪在不用Jfinal,我同事用Spring,druid,informix,也没问题,所以想问问波总,咱们Jfinal对c3p0和druid有区别对待语法处理吗?
假定你用的方言与 informix 驱动 jar 包都一样,自己写的 sql 也一样,只将 c3p0 替换成了 druid , 那么根据排除法,就得去 druid 找原因了。 看看 druid 官方文档有没有相关内容可以帮助解决
<p>麻烦问一下你们的druid连接的informix的版本是什么,我这边一直显示不支持</p>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。