最近在整spring+jpa+struts2 
项目连接两个数据库,默认连接oracle,还有一个连接informix。
oralce用的是LocalEntityManagerFactoryBean,JpaTransactionManager
informix用的是jdbctemplate ,DataSourceTransactionManager。当我用用jdbctemplate连接informix,查询数据的时候,总是报一下警告:INFO  2009-09-22 09:20:39,984 SQLWarnings:logAndClearWarnings - Database has transactions
java.sql.SQLWarning: Database has transactions
at com.informix.util.IfxWarnMsg.getSQLWarning(IfxWarnMsg.java:125)
at com.informix.util.IfxWarnMsg.getSQLWarning(IfxWarnMsg.java:149)
at com.informix.jdbc.IfxSqliConnect.a(IfxSqliConnect.java:1995)
at com.informix.jdbc.IfxSqliConnect.t(IfxSqliConnect.java:4243)
at com.informix.jdbc.IfxSqliConnect.b(IfxSqliConnect.java:2823)
at com.informix.jdbc.IfxSqliConnect.a(IfxSqliConnect.java:2696)
at com.informix.jdbc.IfxSqli.a(IfxSqli.java:2643)
at com.informix.jdbc.IfxSqli.executeOpenDatabase(IfxSqli.java:1836)
at com.informix.jdbc.IfxSqliConnect.<init>(IfxSqliConnect.java:1361)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.informix.jdbc.IfxDriver.connect(IfxDriver.java:254)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
INFO  2009-09-22 09:20:39,984 SQLWarnings:logAndClearWarnings - Database selected
java.sql.SQLWarning: Database selected
at com.informix.util.IfxWarnMsg.getSQLWarning(IfxWarnMsg.java:125)
at com.informix.util.IfxWarnMsg.getSQLWarning(IfxWarnMsg.java:149)
at com.informix.jdbc.IfxSqliConnect.a(IfxSqliConnect.java:1995)
at com.informix.jdbc.IfxSqliConnect.t(IfxSqliConnect.java:4249)
at com.informix.jdbc.IfxSqliConnect.b(IfxSqliConnect.java:2823)
at com.informix.jdbc.IfxSqliConnect.a(IfxSqliConnect.java:2696)
at com.informix.jdbc.IfxSqli.a(IfxSqli.java:2643)
at com.informix.jdbc.IfxSqli.executeOpenDatabase(IfxSqli.java:1836)
at com.informix.jdbc.IfxSqliConnect.<init>(IfxSqliConnect.java:1361)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.informix.jdbc.IfxDriver.connect(IfxDriver.java:254)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
这些警告在网上没有看到解决办法。我也不知道到底是哪里错了。
现在只要一查询就不停的报这些警告,但是数据还是查的到,程序还是照样运行。如果我不管这些警告,项目长期跑起来,会不会有什么影响呢?这些警告到底是什么引起的呢?

解决方案 »

  1.   

     开发这么长时间了,
     没看到过java.sql.SQLWarning。
     事出必有因,还是处理了比较好。
     以免来日留下后患。
      

  2.   

    这是我连接informix的配置:<?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <bean id="emagDataSource"
    class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close"> <property name="driverClass" value="com.informix.jdbc.IfxDriver" />
    <property name="jdbcUrl"
    value="jdbc:informix-sqli://10.1.1.26:9999/dzppt_srv:INFORMIXSERVER=dz_tst" />
    <property name="user" value="dzppt" />
    <property name="password" value="dzppt" />
    <!--连接池中保留的最小连接数-->
    <property name="minPoolSize" value="1" /> <!--连接池中保留的最大连接数 Default: 15 -->
    <property name="maxPoolSize" value="3" /> <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间 Default: 3 -->
    <property name="initialPoolSize" value="1" /> <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃 Default: 0 -->
    <property name="maxIdleTime" value="5" /> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 Default: 3 -->
    <property name="acquireIncrement" value="5" /> </bean>
    <bean id="jdbcTemplate"
    class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="emagDataSource" />
    </bean> <bean id="myTransactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource">
    <ref local="emagDataSource" />
    </property>
    </bean> <bean id="txProxyTemplate" abstract="true"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager">
    <ref bean="myTransactionManager" />
    </property> <!-- <property name="proxyTargetClass">-->
    <!-- <value>true</value>-->
    <!-- </property>--> <property name="transactionAttributes">
    <props>
    <prop key="save*">PROPAGATION_REQUIRED</prop>
    <prop key="merge*">PROPAGATION_REQUIRED</prop>
    <prop key="attach*">PROPAGATION_REQUIRED</prop>
    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="create*">PROPAGATION_REQUIRED</prop>
    <prop key="save*">PROPAGATION_REQUIRED</prop>
    <prop key="remove*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="del*">PROPAGATION_REQUIRED</prop>
    <prop key="*">PROPAGATION_REQUIRED</prop>
    </props>
    </property>
    </bean>

    <bean id="emagDAO"
    class="com.quota.dao.hibernate.EmagInfoDAOImpl">
    <property name="dataSource" ref="emagDataSource" />
    </bean> <bean id="emagInfoManagerImpl"
    class="com.quota.manager.impl.EmagInfoManagerImpl">
    <property name="emagDAO">
    <ref local="emagDAO" />
    </property>
    </bean> <bean id="emagInfoManager" parent="txProxyTemplate">
    <property name="target">
    <ref local="emagInfoManagerImpl" />
    </property>
    </bean></beans>
      

  3.   

    说一下我的解决办法,不是最好的,估计像他们说的有点掩耳盗铃的味道。
    把日志级别改了下
    之前是:log4j.rootLogger=INFO,stdout,dailyLog
    现在把stdout去掉,变成:log4j.rootLogger=INFO,dailyLog
    就是把警告屏蔽掉了。至于stdout在log4j中的作用是什么,我还没搞明白,呵呵。。
      

  4.   

    stdout的作用是在控制台打印日志程序