2016-04-13 43 views
1

我有使用Jdbc進行sql訪問的thingie。我可以使用JdbcTemplate,但不能使用NamedParameterJdbcTemplate。 namedparam總是返回空指針,而jdbctemplate像魅力一樣工作。我正在使用彈簧4.2.4.RELEASEJava spring autowires Jdbctemplate而不是NamedParameterJdbcTemplate

我錯過了一步嗎?這裏的簡化代碼:

彈簧data.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:property-placeholder location="classpath*:/db_connection.properties" /> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="${db.driver}" /> 
     <property name="url" value="${db.url}" /> 
     <property name="username" value="${db.username}" /> 
     <property name="password" value="${db.password}" /> 
    </bean> 

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> 
     <constructor-arg ref="dataSource" /> 
    </bean> 

</beans> 

someDAOImpl.java:

/* 
    imports 
*/ 

@Component 
public class someDAOImpl implements someDAO { 

    @Autowired 
     private JdbcTemplate jdbcTemplate; 
     private NamedParameterJdbcTemplate namedParameterJdbcTemplate; 

    public void thisDoesntWork(Integer intValue) { 
     String sql = "UPDATE table SET value = :value WHERE id = 1"; 
     MapSqlParameterSource params = new MapSqlParameterSource(); 
     params.addValue("value", intValue); 
     try { 
      namedParameterJdbcTemplate.update(sql, params); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public ArrayList<ResultClass> thisWorks(Integer intValue) { 

     String sql = "SELECT * FROM table WHERE value = ?"; 
     ArrayList<ResultClass> results = new ArrayList<ResultClass>(); 
     try { 
      results = (ArrayList<ResultClass>) jdbcTemplate.query(sql, new Object[] { intValue }, new ResultClassMapper()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return results; 
    } 
} 

回答

1

您也需要自動連接的是NamedParameterJdbcTemplate

@Autowired 
private NamedParameterJdbcTemplate namedParameterJdbcTemplate; 
+0

啊!我多麼愚蠢。我認爲這會考慮這兩個,但顯然它只是第一個。現在它工作了!謝謝 :) –

相關問題