我想用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)
你的連接被關閉,服務器拒絕了連接,你應該檢查你的防火牆設置。 –
如果是Windows,請禁用防火牆。另外,我希望配置細節是正確的。 –
應該關閉這個問題,因爲這只是一個簡單的錯字而已。 –