簡體   English   中英

使用Spring的Oracle Db連接錯誤

[英]Oracle Db connection error using Spring

我有以下applicationContext.properties文件。 通過AS Glassfish定義的JNDI創建數據源時,我能夠連接並執行Oracle Sql查詢。 但是,當我使用org.apache.commons.dbcp.BasicDataSource定義數據源時,定義出現以下錯誤(ORA-00911:無效字符)。

有趣的一點是,我已經嘗試使用Mysql Db進行這兩種定義,但都有效。 我究竟做錯了什么?

MySQL的:

JNDI方式:工作

直接Db連接:有效

甲骨文:

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

我認為您在

<property name="validationQuery" value="${db.validationQuery}"/>

您可以檢查是否有任何特殊字符。 謝謝

我更改了數據源定義,如下所示,它可以正常工作。

<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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM