使用Spring的Oracle Db连接错误

时间:2014-03-27 07:42:21

标签: java spring oracle java-ee

我有以下applicationContext.properties文件。 我可以连接并执行Oracle Sql查询,同时数据源通过在AS Glassfish上定义的JNDI进行伪装。但是当我使用org.apache.commons.dbcp.BasicDataSource"定义数据源时定义我有以下错误(ORA-00911:无效字符)。

有趣的是,我已经尝试使用Mysql Db进行了两种定义,但它确实有效。我做错了什么?

MySQL的:

JNDI方式:工作

Direc Db Connection:Works

甲骨文:

JNDI方式:工作

直接Db连接:不起作用

applicationContext.properties文件

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="${sim.jndi}" />
</bean>


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${db.driver}"/>
    <property name="url" value="${db.url}"/>
    <property name="username" value="${db.username}"/>
    <property name="password" value="${db.password}"/>
    <property name="initialSize" value="${db.initialSize}"/>
    <property name="minIdle" value="${db.minIdle}"/>
    <property name="maxIdle" value="${db.maxIdle}"/>
    <property name="maxActive" value="${db.maxActive}"/>
    <property name="validationQuery" value="${db.validationQuery}"/>
    <property name="testOnBorrow" value="false"/>
    <property name="testWhileIdle" value="true"/>
    <property name="timeBetweenEvictionRunsMillis" value="1200000"/>
    <property name="minEvictableIdleTimeMillis" value="1800000"/>
    <property name="numTestsPerEvictionRun" value="5"/>
    <property name="defaultAutoCommit" value="true"/>
</bean>

我遇到错误:

)
javax.el.ELException: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC
Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableCo
nnectionFactory (ORA-00911: invalid character
)
        at com.sun.el.parser.AstValue.invoke(AstValue.java:279)
        at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
        at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionList
ener.java:149)
        at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
        at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:818)
        at javax.faces.component.UICommand.broadcast(UICommand.java:300)
        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
        at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
        at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
        at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.jav

2 个答案:

答案 0 :(得分:1)

我认为你在

中遇到了问题
<property name="validationQuery" value="${db.validationQuery}"/>

可以检查是否有任何特殊字符。 感谢

答案 1 :(得分:0)

我已将我的数据源定义更改为如下,并且可以正常工作。

<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="${db.driver}" />
        <property name="url" value="${db.url}" />
        <property name="username" value="${db.username}" />
        <property name="password" value="${db.password}" />
    </bean>