【问题标题】:org.postgresql.util.PSQLException: ERROR: syntax error at or near "7"org.postgresql.util.PSQLException:错误:“7”处或附近的语法错误
【发布时间】:2019-09-18 10:28:11
【问题描述】:

我正在尝试在我的应用程序中创建私人聊天,但是当我尝试创建表格时出现此错误:

org.postgresql.util.PSQLException:错误:“7”处或附近的语法错误 位置:14

代码:

 public static String checkIfChatExists(String code, String friend) throws SQLException {
        String i = LoginManager.checkCode(code);
        if(i.equals("code-not-exists")) {
            return "invalid-code";
        }

        ResultSet rs = conn.prepareStatement("SELECT * FROM pwchats").executeQuery();
        while (rs.next()) {
            if(rs.getString("user1").equals(i) && rs.getString("user2").equals(friend) || rs.getString("user1").equals(friend) && rs.getString("user2").equals(i)) {
                return "exists";
            }
        }
        PreparedStatement pre = conn.prepareStatement("INSERT INTO pwchats(user1, user2) VALUES(?, ?)");
        pre.setString(1, i);
        pre.setString(2, friend);
        pre.execute();
        PreparedStatement getChatId  = conn.prepareStatement("SELECT * FROM pwchats WHERE user1 = ? AND user2 = ?;");
        getChatId.setString(1, i);
        getChatId.setString(2, friend);
        ResultSet rss = getChatId.executeQuery();
        while (rss.next()) {
            PreparedStatement chat = conn.prepareStatement("CREATE TABLE " + rss.getInt("id") + "chat (username text NOT NULL, created_at timestamp with time zone NOT NULL DEFAULT now(), avatar text NOT NULL, message text NOT NULL, id serial NOT NULL);");
            chat.execute(); //ERROR
            return "done";
        }
        return "wat";
    }

【问题讨论】:

  • 请考虑从您的代码创建表是否有意义。

标签: java sql postgresql


【解决方案1】:

您看到的错误可能来自那里:

preparedStatement chat = conn.prepareStatement("CREATE TABLE " + rss.getInt("id") + "chat (...);");

通常在 SQL 中,表名不能以数字开头。如果您要使用双引号将表名括起来,Postgres 仍然允许这样做,但是您每次查询时都需要将表名双引号,这可能很乏味。

一种解决方案是将数字放在表名的末尾,例如:

preparedStatement chat = conn.prepareStatement("CREATE TABLE chat" + rss.getInt("id") + " (...);");

Demo on DB Fiddle

create table 7chat(x int);
错误:“7”处或附近的语法错误 第 1 行:创建表 7chat(x int); ^
create table "7chat"(x int);
-- works

create table chat7(x int);
--works

【讨论】:

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