Spring Boot 错误的SQL语法嵌套异常是org.h2.jdbc.JdbcSQLSyntaxErrorException:

hgb9j2n6  于 2022-11-05  发布在  Spring
关注(0)|答案(1)|浏览(515)

我试图用oauth实现jwt。我正在使用h2进行数据库连接。我得到一个异常,说

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT * FROM USERS WHERE USERNAME=?]; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USERS" not found; SQL statement:

我的UserDdQueryClass是:

package com.pallavi.springbootoauth2jwt;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.stereotype.Repository;

@Repository //this annotation is to tell the spring that this class is to access data for user (DAO class)
public class UsersDbQuery {

     @Autowired
       private JdbcTemplate jdbcTemplate;

       public UsersPojo getUserDetails(String username) {
          Collection<GrantedAuthority> listOfgrantedAuthorities = new ArrayList<GrantedAuthority>();
          String userSQLQuery = "SELECT * FROM USERS WHERE USERNAME=?";
          List<UsersPojo> list = jdbcTemplate.query(userSQLQuery, new String[] { username },
             (ResultSet rs, int rowNum) -> {

                 UsersPojo user = new UsersPojo();
             user.setUsername(username);
             user.setPassword(rs.getString("PASSWORD"));
             return user;
          });
          if (list.size() > 0) {
             GrantedAuthority grantedAuthority = new SimpleGrantedAuthority("ROLE_SYSTEMADMIN");
             listOfgrantedAuthorities.add(grantedAuthority);
             list.get(0).setListOfgrantedAuthorities(listOfgrantedAuthorities);
             return list.get(0);
          }
          return null;
       }
}

我已经把Data.sql和Schema.sql放到application.properties中了,我正在使用intelligie idea,intelligie idea测试连接成功。
Here is the screen shot for the configuration of H2 database.

2izufjch

2izufjch1#

我已经使用内存版本的H2复制了一个稍微简单一些的代码版本。我有一个修改过的UsersDBQuery类版本。我已经使用lombok删除了UsersPojo类中的大量样板代码。我很高兴与你分享这些代码。它在这个github reposory中:https://github.com/AdrianChallinorOsiris/UsersDbQuery.git
钥匙拿回家:Schema.sql和Data.sql必须全部小写!
其他带回家的物品:

  • 我在UsersDbquery上使用了构造函数注入。这是一个很好的实践,因为它使编写测试代码更简单。
  • 我更改了查询以使用新的格式来处理结果集。
  • 我添加了一个测试用例。这也展示了如何测试DAO层。
  • 我用的是最新的春 Boot !
  • 如果您使用的是h2控制台,请注意url中包含一个会话ID。如果您在使用内存中的数据库时停止/重新启动应用程序,则需要删除此ID,因为会话会发生变化。如果您使用Spring Developer工具,也需要删除此ID。

所有的用户名和密码都是我生成的测试用户名和密码。你的名字没有被使用过。
希望这对你的旅程有所帮助
艾德里安

相关问题