发送到后端时发生I / O错误

时间:2012-10-12 15:04:59

标签: java jdbc

我开始为我的项目使用postgreSQL服务器。这是我第一次使用它。我之前使用过其他商业关系数据库服务器和mysql,但我没有遇到太多问题。我有一个基于spring和多线程的java应用程序。我正在使用postgreSQL jdbc 9版本。

这是数据源的spring配置。

    <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driverClass}"/>
    <property name="url" value="${tribune.jdbc.url}"/>
    <property name="username" value="${tribune.jdbc.username}"/>
    <property name="password" value="${tribune.jdbc.password}"/>
    <property name="initialSize" value="20"/>
    <property name="maxActive" value="40"/>
    <property name="maxIdle" value="1"/>
    <property name="poolPreparedStatements" value="true"/>
    <property name="maxOpenPreparedStatements" value="20"/>
    <property name="testWhileIdle" value="true"/>
    <property name="testOnBorrow" value="true"/>
    <property name="defaultAutoCommit" value="false"/>
    <property name="validationQuery" value="select version()"/>
</bean>

当我运行我的应用程序时,我发现了两个常见的问题。

  1. org.postgresql.util.PSQLException:没有为参数1指定pstmt.setString(1,variable)的更新语句的值;我在这一行之前检查变量以查看它是否为空或为空。但它仍然会发生。

        if (programId == null || programId.isEmpty()) {
        throw new IllegalArgumentException("'programId' can not be null.");
    }
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    SubscriptionGroup subscriptionGroup = new SubscriptionGroup();
    
    conn = session.getConnection();
    String query = getQuery(QUERY_GET_NOTIFICATIONS_BY_PROGRAM_ID);
    log.debug("getSubscriptionGroupByProgramId.query: " + query);
    log.info("getSubscriptionGroupByProgramId.programId: " + programId + "=="+ programId.length());
    pstmt = conn.prepareStatement(query);
    pstmt.setString(1, programId);
    rs = pstmt.executeQuery();
    
  2. 从'rs = pstmt.executeQuery()'抛出异常。

    1. 引起:org.postgresql.util.PSQLException:发送到后端时发生I / O错误。 at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:283) at org.postgresql.jdbc2.AbstractJdbc2Connection.executeTransactionCommand(AbstractJdbc2Connection.java:685) at org.postgresql.jdbc2.AbstractJdbc2Connection.commit(AbstractJdbc2Connection.java:709) 在org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:301) 在org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:301) 在org.apache.commons.dbcp.PoolingDataSource $ PoolGuardConnectionWrapper.commit(PoolingDataSource.java:200)
    2. 对于#2,它会在尝试提交时发生,即使它没有从连接中获取语句失败。

      任何人(使用过postgreSQL或熟悉数据源设置)都可以告诉我这是什么问题吗?

      感谢。

0 个答案:

没有答案