Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
402 views
in Technique[技术] by (71.8m points)

sql - How to solve unknown column in where clause

I have one problem with method getByLogin :

@Override
    public User getUserByLogin(String username) {
        Session  session = this.sessionFactory.openSession();
        User user =
                (User) session.createQuery("FROM pl.edu.wszib.model.User WHERE username = " + username ).uniqueResult();
        session.close();
        System.out.println(user);
        return user;

    }

i want to get user by username by i got : com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'konrad' in 'where clause'

My form look like :

 <form action="/user"  th:object="${user}" method="post" id="login" class="input-group">
                <input type="text" class="input-field" placeholder="username" name="username" th:field="*{username}" th:errorClass="error"required>
                <span th:if="${#fields.hasErrors('username')}" th:errors="*{username}">Incorrect data</span>

                <button type="submit" class="submit-btn">Get your  profil</button>
            </form>

and my controller look that :

@RequestMapping("/user")
    public String user(Model model, User user, BindingResult bindingResult){
        if(bindingResult.hasErrors()) {
            return "user"; // powrót do formularza
       }
        User result =  userDAO.getUserByLogin(user.getUsername());
        model.addAttribute("result", result);
        return "resultUser";

    }

    @GetMapping("/user")
    public String userForm(User user) {
        return "user";
    }

but i have second method get by id which work good and i got user by id this method this metod look that:

 @Override
    public User getUserById(int idUser) {
        Session  session = this.sessionFactory.openSession();
        User user =
                (User) session.createQuery("FROM pl.edu.wszib.model.User WHERE idUser = " + idUser ).uniqueResult();
        session.close();
        System.out.println(user);
        return user;

    }

I have to users in my database and one user have username konrad but this method cant work. Can someone explain why metod getBylogin dont work ?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The unknown column is related to the missing quote around a string, so the string content is evaluated as a column name.

You can avoid this using parameter binding:

    session.createQuery("FROM pl.edu.wszib.model.User WHERE username = :username" )
    .setParameter("username", username)
    .uniqueResult();

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

56.8k users

...