我刚开始使用PostgeSQL弹出jdbc并在JdbcTemplate.update()的DAO类中获取NullPointerException。内容如下:
的pom.xml
<!-- Spring JDBC Support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<!-- postgreSQL Driver -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4-1200-jdbc41</version>
</dependency>
servlet的context.xml中
<!-- declare datasource bean -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5432/notesHero" />
<property name="username" value="postgres" />
<property name="password" value="postgres" />
</bean>
DAOImpl类
@Component
public class AdvertiseDAOImpl implements AdvertiseDAO
{
private JdbcTemplate template;
@Autowired
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
template = new JdbcTemplate(dataSource);
}
/*public AdvertiseDAOImpl(DataSource dataSource) {
template = new JdbcTemplate(dataSource);
}*/
@Override
public void save(Advertise ad) {
// TODO Auto-generated method stub
String insertQry = "INSERT INTO ad_master (name, email_id) values (?,?)";
System.out.println(ad.getName() + ad.getEmail());
template.update(insertQry, ad.getName(), ad.getEmail());
}
@Override
public void delete(long postId) {
// TODO Auto-generated method stub
}
@Override
public Advertise get(long postId) {
// TODO Auto-generated method stub
return null;
}
}
在这方面的任何帮助将受到高度赞赏..
答案 0 :(得分:1)
问题在这里:
@Autowired
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
template = new JdbcTemplate(dataSource);
}
您在字段上进行自动装配,因此您的setter方法永远不会被调用,因此您的模板变量保持未初始化(或默认为null)。
因此,而不是自动装配字段autowire setter方法。
答案 1 :(得分:0)
问题可能是Spring没有调用方法
public void setDataSource(DataSource dataSource)
接线时
@Autowired
private DataSource dataSource;
通过将此方法添加到类AdvertiseDAOImpl
,Spring完成自动装配DataSource后,可以初始化JdbcTemplate@PostConstruct
public void initialize() {
template = new JdbcTemplate(dataSource);
}
或者,您可以通过将@Autowired
注释添加到private JdbcTemplate template;
字段来定义JdbcTemplate bean并使其自动装配。