【问题标题】:org.postgresql.util.PSQLException: ERROR: syntax error at or near "-"org.postgresql.util.PSQLException:错误:“-”处或附近的语法错误
【发布时间】:2020-08-28 23:03:20
【问题描述】:

我有一个 PostreSQL 数据库,我正在尝试使用 Java 应用程序访问它。当涉及到以下代码时:

public class UserRepo {

    private String baseQuery = "SELECT * FROM bank-console.user_credentials ";


    public Optional<UserInfo> findUserByCredentials(String username, String password) {

        Optional<UserInfo> _user = Optional.empty();

        try (Connection conn = ConnectionFactory.getInstance().getConnection()){
            String sql =  baseQuery +
                    "WHERE username = ? AND password = ?";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, username);
            pstmt.setString(2, password);

            ResultSet rs = pstmt.executeQuery();

            _user = mapResultSet(rs).stream().findFirst();

        } catch (SQLException sqle) {
            sqle.printStackTrace();
        }

        return _user;
    }

它会抛出与问题标题完全相同的错误消息。当我获取 baseQuery 和 String sql 的文本并将它们准确地输入到我的 PostgreSQL 应用程序中时(用实际值替换问号),它会完美地检索表。这里的语法错误在哪里?

我的 pom 文件包含

<dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>42.2.12</version>
 </dependency>

【问题讨论】:

  • "bank-console".user_credentials 这样的模式名称加上双引号。您不应该在标识符中添加连字符。

标签: java postgresql jdbc


【解决方案1】:

针对@Mike Organek 的评论,答案是bank-console 不应该有连字符。使用双引号不起作用,因为 baseQuery 已经在双引号内。单引号本身就是一个语法错误。所以行之有效的是将bank-console改为bankconsole。我的 SQL 应用程序允许我在不丢失表格的情况下做到这一点。然后相应地更改 baseQuery。

【讨论】:

    猜你喜欢
    • 2016-01-08
    • 1970-01-01
    • 2015-07-24
    • 2017-07-02
    • 1970-01-01
    • 2021-11-30
    • 2019-11-23
    • 2017-02-20
    • 2017-07-15
    相关资源
    最近更新 更多