0

我有一个使用jtds驱动程序并commons-dbcp作为连接池的 java 应用程序。此应用程序连接到Sybase ASE 12.5. 不时sybase重新启动以进行维护。重新启动后,我的应用程序尝试重新连接到sybase,但它似乎一直失败,但出现以下异常:

java.sql.SQLException: Stored procedure 'dbo.pmxSystemDate' not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output). at 
    net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368) at 
    net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820) at 
    net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258) at 
    net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:632) at 
    net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:477) at 
    net.sourceforge.jtds.jdbc.JtdsStatement.executeQuery(JtdsStatement.java:1304) 

这是spring数据源的配置:

<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver" />
    <property name="url" value="jdbc:jtds:sybase://dbms:6000/dbTD" />
    <property name="username" value="sa" />
    <property name="password" value="" />
    <property name="initialSize" value="5"/>
    <property name="maxActive" value="10"/>
    <property name="validationQuery" value="SELECT 1" />
    <property name="testOnBorrow" value="true" />
    <property name="maxWait" value="10" />      
    <property name="removeAbandoned" value="true" />
    <property name="removeAbandonedTimeout" value="10" />
    <property name="validationQueryTimeout" value="3" />
</bean>

如果我尝试通过禁用然后启用网络接口来模拟网络故障,一切都会按预期工作,并且我的应用程序会成功重新连接。

我也尝试过jconnect sybase驱动程序,但没有成功。

我知道我可以通过指定完全限定的对象名称来解决此问题,但在这种情况下,我将对源代码进行大量编辑,因此我正在寻找更简单的解决方案。

有没有人遇到过这样的问题?

4

1 回答 1

0

好吧,为了克服这个问题,我不得不更改验证查询

select 1

select name from dbTD..sysobjects where name='sysobjects'
于 2011-11-29T06:37:26.247 回答