【问题标题】:DAO-Spring MVC : error to execute an update query [duplicate]DAO-Spring MVC:执行更新查询时出错[重复]
【发布时间】:2016-12-28 14:11:55
【问题描述】:

我用 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());

控制台显示此错误:

十二月。 2016 年 2 月 28 日下午 2:58:32 org.apache.catalina.core.StandardWrapperValve 调用 坟墓:servlet [MyServletSpring] 在路径 [/monProjetSpring] 的上下文中的 Servlet.service() 引发异常 [请求处理 失败的;嵌套异常是 java.lang.NullPointerException] 与根 原因 java.lang.NullPointerException 在 controlleurs.RepertoryDAO.addRepertory(RepertoryDAO.java:65) 在 controlleurs.NewDirectory.directoryRegistered(NewDirectory.java:61) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)

感谢您的帮助。

【问题讨论】:

  • 获取您的 sql 查询并使用另一个 sql 客户端对 db 运行它,看看它是否有效。我的猜测是您的查询格式不正确。每个“逗号”后都缺少“空格”。
  • 谢谢,但这对我没有帮助。我添加了一些空格,但总是有同样的问题。
  • 该错误表明您的 getMonJdbc() 返回 null。因此 toString() 方法抛出异常。我猜你的`public void setMonJdbc(DataSource ds)`方法上的依赖注入没有正常工作
  • 第 65 行是哪一行?
  • 让我猜猜...在调用 RepertoryDAO 的代码中,您正在执行 new RepertoryDAO() 而不是获取弹簧配置的实例。

标签: java spring model-view-controller dao


【解决方案1】:

这似乎是一个基本的 Spring 问题。

  1. 首先,看看你是否注册了一个数据源,对我来说,自动装配注释只是尝试注入数据源参数。如果正确,您可以尝试在 xml 配置文件中定义一个 jdbcTemplate bean,并将数据源作为属性。

  2. 然后,您可以将 @Autowired 放在 DAO 类中 jdbcTemplate 定义的上方。

这可能不是您想要的方式,但它可以很容易地工作。

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多