在Spring 3.0中使用jdbcTemplate时出现空指针异常

时间:2014-03-09 06:21:54

标签: spring jdbctemplate

这是我到目前为止所尝试过的 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。请帮忙。

1 个答案:

答案 0 :(得分:3)

问题是数据源直接注入到字段中,但是从不调用setter。

您需要将@Autowired注释从字段移动到设置器,如此。

@Autowired
public void setDataSource(DataSource dataSource) {
    this.jdbcTemplate = new JdbcTemplate(dataSource);
}