错误信息如下
Resolved [org.springframework.jdbc.BadSqlGrammarException: <EOL><EOL>### Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'rank <EOL> <EOL> WHERE (song_list_id IN (3,4,5,6))' at line 1<EOL><EOL>### The error may exist in com/xy/music/mapper/RankMapper.java (best guess)<EOL><EOL>### The error may involve defaultParameterMap<EOL><EOL>### The error occurred while setting parameters<EOL><EOL>### SQL: DELETE FROM rank WHERE (song_list_id IN (?,?,?,?))<EOL><EOL>### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'rank <EOL> <EOL> WHERE (song_list_id IN (3,4,5,6))' at line 1<EOL>; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'rank <EOL> <EOL> WHERE (song_list_id IN (3,4,5,6))' at line 1]
已解决 [org.springframework.jdbc.BadSqlGrammarException: <EOL><EOL>### 更新数据库时出错。原因:java.sql.SQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'rank <EOL> <EOL> WHERE (song_list_id IN (3,4,5,6))' 附近使用正确的语法<EOL><EOL># ##错误可能存在于com/xy/music/mapper/RankMapper.java(最佳猜测)<EOL><EOL>###错误可能涉及defaultParameterMap<EOL><EOL>###设置时出错parameters<EOL><EOL>### SQL: DELETE FROM rank WHERE (song_list_id IN (?,?,?,?))<EOL><EOL>### Cause: java.sql.SQLSyntaxErrorException: You have an error在您的 SQL 语法中;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“rank <EOL> <EOL> WHERE (song_list_id IN (3,4,5,6))' 附近使用正确的语法<EOL>;糟糕的 SQL 语法 [];嵌套异常是 java.sql.SQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'rank <EOL> <EOL> WHERE (song_list_id IN (3,4,5,6))' 附近使用正确的语法]
数据库表结构如下
用MybatisPlus生成的Pojo
查询语句如下:
@Transactional(rollbackFor = Exception.class)
@Override
public boolean removeBatchByIdsAndOtherInfo(List<Integer> ids) {
// 获取所有歌单
LambdaQueryWrapper<SongList> songListLambdaQueryWrapper = new LambdaQueryWrapper<>();
(SongList::getId,ids);
List<SongList> songLists = songListMapper.selectList(songListLambdaQueryWrapper);
if (songLists.size() > 0) {
// 删除歌单照片
List<String> songListPics = songLists.stream()
.map(songList -> songList.getPic().substring(songList.getPic().lastIndexOf("/") + 1))
.collect(Collectors.toList());
FileUtils.delete(PathUtils.SONG_LIST_PIC_PATH,songListPics);
// 删除包含歌单的其他信息
LambdaQueryWrapper<Rank> rankLambdaQueryWrapper = new LambdaQueryWrapper<>();
(Rank::getSongListId,ids);
rankMapper.delete(rankLambdaQueryWrapper);
LambdaQueryWrapper<ListSong> listSongLambdaQueryWrapper = new LambdaQueryWrapper<>();
(ListSong::getSongListId,ids);
listSongMapper.delete(listSongLambdaQueryWrapper);
LambdaQueryWrapper<Collect> collectLambdaQueryWrapper = new LambdaQueryWrapper<>();
(Collect::getSongListId,ids);
collectMapper.delete(collectLambdaQueryWrapper);
LambdaQueryWrapper<Comment> commentLambdaQueryWrapper = new LambdaQueryWrapper<>();
(Comment::getSongListId,ids);
commentMapper.delete(commentLambdaQueryWrapper);
}
// 删除歌单
int i = songListMapper.deleteBatchIds(ids);
return i > 0;
}
错误原因:
数据库表名使用了rank于数据库关键词rank冲突了
解决方案:
修改数据库表名即可