Когда я сохраняю, я получаю это исключение в Java Spring - PullRequest
0 голосов
/ 08 октября 2018

У меня есть это исключение в моем коде.Я новичок в Java.Ниже я упоминаю свой код.

Мне нужно знать, почему это происходит, даже если я присвоил значение параметру имени.

Я несколько раз менял свой параметр, но он выдает мне то же исключение.

Я использую Springframework 4.3.7 spring-context, spring-webmvc, spring-jdbc.

Это мой код UserDaoImpl

   package com.ezeon.capp.dao;

   import com.ezeon.capp.domain.User;
   import java.util.HashMap;
   import java.util.List;
   import java.util.Map;
   import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
   import org.springframework.jdbc.core.namedparam.SqlParameterSource;
   import org.springframework.jdbc.support.GeneratedKeyHolder;
   import org.springframework.jdbc.support.KeyHolder;
   import org.springframework.stereotype.Repository;


@Repository
public class UserDaoImpl extends BaseDao implements IUserDao {

@Override
 public void save(User u) {
        String sql =" INSERT INTO user(name, phone, email, address, loginName, 
        password, role, loginStatus)"
        +" VALUES ( :name, :phone, :email, :address, :loginName, :password, 
 :role, :logingStatus)";
        Map m = new HashMap();

        m.put("name", u.getName());
        m.put("phone", u.getPhone());
        m.put("email", u.getEmail());
        m.put("address", u.getAddress());
        m.put("loginName", u.getLoginName());
        m.put("password", u.getPassword());
        m.put("role", u.getRole());
        m.put("loginStatus", u.getLoginStatus());

        KeyHolder kh = new GeneratedKeyHolder();
        SqlParameterSource ps = new MapSqlParameterSource();
        super.getNamedParameterJdbcTemplate().update(sql, ps, kh);
        Integer userId = kh.getKey().intValue();
        u.setUserId(userId);
    }

}

Это мой тестовый класс

package com.ezeon.capp.test;

import com.ezeon.capp.config.SpringRootConfig;
import com.ezeon.capp.dao.IUserDao;
import com.ezeon.capp.domain.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class TestUserDaoSave {
    public static void main(String[] args){

        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringRootConfig.class);

        IUserDao userdao = ctx.getBean(IUserDao.class);
        User u = new User();

        u.setName("Tharinda");
        u.setPhone("0714536598");
        u.setEmail("tharind@gmail.com");
        u.setAddress("Kurunegala");
        u.setLoginName("amit");
        u.setPassword("123");
        u.setRole(1);
        u.setLoginStatus(1);

        userdao.save(u);
        System.out.println("-------------Saved-----------");
    }

}

Исключение

Exception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: No value supplied for the SQL parameter 'name': No value registered for key 'name'
    at org.springframework.jdbc.core.namedparam.NamedParameterUtils.buildValueArray(NamedParameterUtils.java:342)
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:309)
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:299)
    at com.ezeon.capp.dao.UserDaoImpl.save(UserDaoImpl.java:42)
    at com.ezeon.capp.test.TestUserDaoSave.main(TestUserDaoSave.java:35)

1 Ответ

0 голосов
/ 08 октября 2018

Ваш код выглядит нормально, вы создали карту для именованных параметров.Но вы на самом деле не использовали его.

Замените:

SqlParameterSource ps = new MapSqlParameterSource();

на

SqlParameterSource ps = new MapSqlParameterSource(m);

См. doc

...