我开始为我的项目使用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>
当我运行我的应用程序时,我发现了两个常见的问题。
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();
从'rs = pstmt.executeQuery()'抛出异常。
对于#2,它会在尝试提交时发生,即使它没有从连接中获取语句失败。
任何人(使用过postgreSQL或熟悉数据源设置)都可以告诉我这是什么问题吗?
感谢。