gpt4 book ai didi

mysql - 'where clause' 中的 Spring 未知列

转载 作者:行者123 更新时间:2023-11-29 10:37:18 25 4
gpt4 key购买 nike

我正在尝试将用户名从 spring security 登录页面传递到 mysql select,名为 Timetables 的页面使用该选择来显示数据库中的表。该页面应该只显示与特定用户相关的数据。

但是无论我尝试什么,我都会收到 500 错误消息

嵌套异常是 java.sql.SQLSyntaxErrorException:“where 子句”中的未知列“admin1”

admin1是用于登录的用户名。

我尝试使用 System.out.println(logininame); 测试该变量,它确实是一个字符串。

我尝试了几种技巧,但唯一有效的方法是在字符串末尾手动添加“'admin1' ”。由于我有多个用户,这不是一个解决方案。

任何我可能会出错的想法。错误发生在服务类中sql字符串的末尾。

读取用户名的 Controller

@Controller
public class TimetableController {

@Autowired
TimetableService service;

@Autowired
AssignmentsService serv;

@RequestMapping(value = {"/Timetable"}, method = RequestMethod.GET)
public String index(Model md){
org.springframework.security.core.Authentication auth = SecurityContextHolder.getContext().getAuthentication();
System.out.println(auth.getName());
String loginname = auth.getName();
md.addAttribute("timetables", service.findAll(loginname));
return "Timetable";
}

//request for adding new entry

}

带有查询的服务类

@Service
public class TimetableService {

@Autowired
JdbcTemplate template;

public List<Timetable> findAll(String loginname) {
// System.out.println(loginname);
// String test = "admin1";
String sql = " SELECT timetables.timetableId, timetables.assignmentId, timetables.date, " +
"timetables.hoursWorked, users.username, projects.projectName FROM timetables" +
" INNER join assignments on assignments.assignmentId = timetables.assignmentId" +
" INNER JOIN users on users.userId = assignments.userId" +
" INNER JOIN projects on assignments.projectId = projects.projectId where username=" + loginname;

RowMapper<Timetable> rm = new RowMapper<Timetable>() {
@Override
public Timetable mapRow(ResultSet resultSet, int i) throws SQLException {
Timetable timetable = new Timetable(resultSet.getInt("timetableId"),
resultSet.getInt("assignmentId"),
resultSet.getDate("date"),
resultSet.getInt("hoursWorked"));

return timetable;
}
};

return template.query(sql, rm);
}

Timetable.html 中的表格

<table class="table table-bordered">
<thead>
<tr>
<th>id</th>
<th>project</th>
<th>date</th>
<th>number of hours</th>
</tr>
</thead>
<tbody>
<tr th:each = "obj: ${timetables}">
<td th:text="${obj.timetableId}">45</td>
<td th:value="${obj.assignmentId}">vasi</td>
<td th:text="${obj.date}"></td>1 ian</td>
<td th:text="${obj.hoursWorked}"></td>
</tr>
</tbody>
</table>

最佳答案

您应该使用准备好的语句来防止 SQL 注入(inject)。

将 SQL 查询的结尾更改为:

username=?

查询方式:

return template.query(sql, rm, loginname);

关于mysql - 'where clause' 中的 Spring 未知列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46198030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com