昨天测试查询的时候发现使用oracle时有这么一个错误:Cannot create PoolableConnectionFactory (ORA-00923: 未找到要求的 FROM 关键字)。
我换成了sqlserver和mysql,发现又没有错误。百思不得其解,因为用ibatis的SqlMapClientBuilder.buildSqlMapClient方法是能成功创建对象的,难道是ibatis的sql语句不兼容oracle?不太可能啊!!
于是我翻了下配置文件,破案了。
SqlMapConfig.xml里面有一个配置项:
<property name="validationQuery" value="select 1" />
真相只有一个,该配置项的作用是连接数据库的时候,做一个查询操作,检测连接是否有效。在sql server和mysql中,是可以直接select 1的,但是oracle是需要有from关键字,例如select 1 from dual。
破案之后就简单了,配置项改成
<property name="validationQuery" value="${jdbc.validationQuery}" />
然后在后台代码,按照不同的数据库类型对这个变量进行赋值就可以了。