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

时间:2016-04-27 12:11:28

标签: spring postgresql spring-jdbc

我正在尝试使用postgresql设置数据库连接。我使用简单的vanila 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..");

}

}

这是宣布类DAOImpl:

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连接;嵌套异常是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连接。       at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:207)

1 个答案:

答案 0 :(得分:3)

港口的错字?

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

默认的PostgreSQL端口是5432.除非您当然将其更改为5342:)