sql - 如何解决where子句中的未知列
问题描述
我对方法 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;
}
我想通过用户名获取用户:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:'where 子句'中的未知列'konrad'
我的表格看起来像:
<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>
我的控制器看起来:
@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";
}
但我有第二种方法通过 id 获得,效果很好,我通过 id 获得用户这种方法这个方法看起来:
@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;
}
我必须在我的数据库中使用用户,并且一个用户的用户名是 konrad,但是这种方法不起作用。有人可以解释为什么metod getBylogin 不起作用吗?
解决方案
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();
推荐阅读
- kubernetes - 即使 pod 仍在运行,Kafka 消费者也会因心跳过期而被移除
- reactjs - Webpack设置到tsx中不同类型的scss文件导入
- c# - X 和 Y 元素的 UWP 布局面板
- sql - SELECT INTO vs WITH AS:临时表方法谁更快?
- groovy - 无法替换包含特殊字符“[”的字符串
- android - Moshi (Codegen) - 排除一个字段或属性并在没有自定义适配器的情况下手动处理它
- android - 挂起函数通用形式
- sqlite - 使用 JPakcage 进行 SQLite 部署的 JavaFx:安装时不加载应用程序
- python - Python-将列表转换为具有特定规则的字典
- excel - 给出 #N/A 错误的日期范围 CUBESET 函数