2016-04-13 17 views
1

sql-access için Jdbc kullanan bir şey var. JdbcTemplate kullanabilir ama NamedParameterJdbcTemplate kullanamaz. Namedparam her zaman boş göstericiyi döndürürken jdbctemplate bir çekicilik gibi çalışır. İlkbaharda bir adım eksik miyim? İşte basitleştirilmiş kodlar var:Java yaylı otomatik teller Jdbctemplate ancak NamedParameterJdbcTemplate

yay 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; 
    } 
} 

cevap

1

Ayrıca namedParameterJdbcTemplate

@Autowired 
private NamedParameterJdbcTemplate namedParameterJdbcTemplate; 
+0

Ah autowired gerekiyor! Ne kadar aptalım. İkisini de alacağını sanıyordum ama görünüşe göre sadece ilkini aldı. Şimdi çalışıyor! Teşekkür ederim :) –