DAO-Spring MVC:执行更新查询时出错
DAO-Spring MVC : error to execute an update query
我用 Spring MVC 制作了一个表单。我想用它来填充我的数据库中的数据。
我使用 DAO。使用 sysout,我在控制台中显示数据,但无法执行查询。
package controlleurs;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
@Repository("RepertoryDAO")
public class RepertoryDAO {
private JdbcTemplate myJdbc;
public RepertoryDAO(){
}
@Autowired
public void setMonJdbc(DataSource ds) {
//this.JdbcTemplate = new JdbcTemplate(ds);
this.myJdbc = new JdbcTemplate(ds);
}
//Display data
public List<Repertory> getRepetories(){
return myJdbc.query("select*from main",new RowMapper<Repertory>(){
public Repertory mapRow(ResultSet rs, int rowNum1)
throws SQLException {
Repertory rp=new Repertory();
rp.setId(rs.getInt("id"));
rp.setName(rs.getString("name"));
return rp;
}
});
}
//Add a repertory in database
public void addRepertory(String name, String url, int bl, int noFree, String topic){
String backlinkRequired=Integer.toString(bl);
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("name", name);
System.out.println(name);
params.addValue("url", url);
System.out.println(url);
params.addValue("lienRetour", backlinkRequired);
System.out.println(backlinkRequired);
params.addValue("payant", noFree);
System.out.println(noFree);
params.addValue("topic", topic);
System.out.println(topic);
System.out.println("jdbc"+ getMonJdbc().toString());
this.myJdbc.update("insert into main (name,url,lienRetour,payant,topic) values (:name,:url,:lienRetour,:payant,:topic)",params);
}
public JdbcTemplate getMonJdbc() {
return this.myJdbc;
}
这一行在控制台中给我任何东西。
System.out.println("jdbc"+ getMonJdbc().toString());
控制台显示此错误:
déc. 28, 2016 2:58:32 PM org.apache.catalina.core.StandardWrapperValve
invoke
GRAVE: Servlet.service() for servlet [MyServletSpring] in context with path [/monProjetSpring] threw exception [Request processing
failed; nested exception is java.lang.NullPointerException] with root
cause
java.lang.NullPointerException
at controlleurs.RepertoryDAO.addRepertory(RepertoryDAO.java:65)
at controlleurs.NewDirectory.directoryRegistered(NewDirectory.java:61)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
感谢您的帮助。
这似乎是一个基本的 Spring 问题。
首先,看看您是否注册了数据源,对我来说,自动装配注释只是尝试注入数据源参数。如果正确,您可以尝试在 xml 配置文件中定义一个 jdbcTemplate bean,并将数据源作为属性。
然后您可以将您的@Autowired 放在您的 DAO 中的 jdbcTemplate 定义之上 class.
这可能不是您想要的方式,但它可以轻松工作。
我用 Spring MVC 制作了一个表单。我想用它来填充我的数据库中的数据。 我使用 DAO。使用 sysout,我在控制台中显示数据,但无法执行查询。
package controlleurs;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
@Repository("RepertoryDAO")
public class RepertoryDAO {
private JdbcTemplate myJdbc;
public RepertoryDAO(){
}
@Autowired
public void setMonJdbc(DataSource ds) {
//this.JdbcTemplate = new JdbcTemplate(ds);
this.myJdbc = new JdbcTemplate(ds);
}
//Display data
public List<Repertory> getRepetories(){
return myJdbc.query("select*from main",new RowMapper<Repertory>(){
public Repertory mapRow(ResultSet rs, int rowNum1)
throws SQLException {
Repertory rp=new Repertory();
rp.setId(rs.getInt("id"));
rp.setName(rs.getString("name"));
return rp;
}
});
}
//Add a repertory in database
public void addRepertory(String name, String url, int bl, int noFree, String topic){
String backlinkRequired=Integer.toString(bl);
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("name", name);
System.out.println(name);
params.addValue("url", url);
System.out.println(url);
params.addValue("lienRetour", backlinkRequired);
System.out.println(backlinkRequired);
params.addValue("payant", noFree);
System.out.println(noFree);
params.addValue("topic", topic);
System.out.println(topic);
System.out.println("jdbc"+ getMonJdbc().toString());
this.myJdbc.update("insert into main (name,url,lienRetour,payant,topic) values (:name,:url,:lienRetour,:payant,:topic)",params);
}
public JdbcTemplate getMonJdbc() {
return this.myJdbc;
}
这一行在控制台中给我任何东西。
System.out.println("jdbc"+ getMonJdbc().toString());
控制台显示此错误:
déc. 28, 2016 2:58:32 PM org.apache.catalina.core.StandardWrapperValve invoke GRAVE: Servlet.service() for servlet [MyServletSpring] in context with path [/monProjetSpring] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause java.lang.NullPointerException at controlleurs.RepertoryDAO.addRepertory(RepertoryDAO.java:65) at controlleurs.NewDirectory.directoryRegistered(NewDirectory.java:61) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
感谢您的帮助。
这似乎是一个基本的 Spring 问题。
首先,看看您是否注册了数据源,对我来说,自动装配注释只是尝试注入数据源参数。如果正确,您可以尝试在 xml 配置文件中定义一个 jdbcTemplate bean,并将数据源作为属性。
然后您可以将您的@Autowired 放在您的 DAO 中的 jdbcTemplate 定义之上 class.
这可能不是您想要的方式,但它可以轻松工作。