这是我到目前为止所尝试过的 DaoImpl.java
@Component
public class DaoImpl {
@Autowired
private DataSource dataSource;
private JdbcTemplate jdbcTemplate;
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public int getCircleCount() {
String sql = "select count(*) from circle";
return (Integer)getJdbcTemplate().queryForObject(sql, Integer.class); //throws NPE
//return getJdbcTemplate().queryForInt(sql);
}
}
spring.xml
<bean id="dataSource"
class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="org.apache.derby.jdbc.ClientDriver" />
<property name="url" value="jdbc:derby://localhost:1527/db" />
<property name="initialSize" value="2"/>
<property name="maxTotal" value="5"/>
</bean>
但是我在getCircleCount()的return语句中得到了Null Pointer Exception。 我正在学习Spring JDBC。请帮忙。
答案 0 :(得分:3)
问题是数据源直接注入到字段中,但是从不调用setter。
您需要将@Autowired注释从字段移动到设置器,如此。
@Autowired
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}