Spring JDBC无法连接到postgres数据库,但普通的JDBC能够连接

问题描述:

我想用postgresql建立数据库连接。我使用普通的vanila JDBC,并且能够成功连接到数据库。Spring JDBC无法连接到postgres数据库,但普通的JDBC能够连接

但是,当我使用JdbcTemplate给予相同的连接参数时,我无法连接。

请看看我的代码和配置:

<bean name="dataSource" id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.postgresql.Driver" /> 
    <property name="url" value="jdbc:postgresql://localhost:5342/testdbnew" /> 
    <property name="username" value="admin1" /> 
    <property name="password" value="admin1" /> 
</bean>  

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

<bean name="announcementNewsDAO" id="announcementNewsDAO" class="test.dao.AnnouncementNewsDAOImpl"> 
</bean> 

,这里是我通过代码访问的方式:

首先我创建一个类来实现ApplicationContextAware。于是,从参考我打电话给jdbcTemplate对象。

public class ApplicationContextProvider implements ApplicationContextAware { 

private static ApplicationContext context; 

public static ApplicationContext getApplicationContext() { 
    return context; 
} 

@Override 
public void setApplicationContext(ApplicationContext ac) 
     throws BeansException { 
    context = ac; 
    System.out.println("Context initialized..."); 
    JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate"); 
    System.out.println("jdbcTemplate initialized.."); 

} 

}

这是类AnnouncementDAOImpl的:

public class AnnouncementNewsDAOImpl implements AnnouncementNewsDAO { 


/** 
* JDBCTemplate object for accessing database 
*/ 
@Autowired 
private JdbcTemplate jdbcTemplate ; 


@Override 
public void insertAnnouncementNews(AnnouncementNews news) { 

    String insertQuery = "<db query for insert>"; 
    try { 

     Object[] args = new Object[]{Integer.valueOf(news.getSlno()), news.getStakeholder_code(), news.getInfo_type(), news.getAnnouncement_news(),null,null}; 


     int result = jdbcTemplate.update(insertQuery, args); 

     if(result!=0){ 
      System.out.println("Announcement news inserted for the serial number : "+news.getSlno()); 
     }else{ 
      System.err.println("Could not insert announcement news for the serial number : "+news.getSlno()); 
     } 


    } catch (ParseException pe) { 
     System.err.println("Exception occurred while parsing date : "+pe.getMessage()); 
    } 
} 

,我得到错误:

org.springframework.jdbc.CannotGetJdbcConnectionException:无法获得JDBC Con连线和嵌套的异常是org.postgresql.util.PSQLException:连接被拒绝。检查主机名和端口是否正确,并且postmaster正在接受TCP/IP连接。 在org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) 在org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:628) 在org.springframework.jdbc.core。 JdbcTemplate.update(JdbcTemplate.java:907) 在org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:968) 在org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:978) at原因:org.postgresql.util.PSQLException:连接被拒绝。检查主机名和端口是否正确,并且postmaster正在接受TCP/IP连接。 在org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:207)

+1

你的连接被关闭,服务器拒绝了连接,你应该检查你的防火墙设置。 –

+0

如果是Windows,请禁用防火墙。另外,我希望配置细节是正确的。 –

+0

应该关闭这个问题,因为这只是一个简单的错字而已。 –

错字在端口?

<property name="url" value="jdbc:postgresql://localhost:5342/iitkgpdbnew" /> 

默认的PostgreSQL端口为5432。除非你把它改为5342当然:)的