1
Ich habe eine Sache, die Jdbc für SQL-Zugriff verwendet. Ich kann JdbcTemplate aber nicht NamedParameterJdbcTemplate verwenden. Das Namesparam gibt immer den Nullzeiger zurück, während das JDBCTemplate wie ein Charm funktioniert. Ich benutze Feder 4.2.4.RELEASEJava spring autowires Jdbctemplate aber nicht NamedParameterJdbcTemplate
Fehle mir hier ein Schritt? Hier ist die vereinfachte Codes:
feder 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;
}
}
Ah autowired! Wie dumm von mir. Ich dachte, es würde beides aufnehmen, aber anscheinend dauerte es nur die erste. Jetzt funktioniert es! Vielen Dank :) –