2016-04-27 142 views
2

我想用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

應該關閉這個問題,因爲這只是一個簡單的錯字而已。 –

回答

3

錯字在端口?

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

默認的PostgreSQL端口爲5432。除非你把它改爲5342當然:)的