【发布时间】:2019-07-02 19:28:15
【问题描述】:
我想用 CREATE 语句创建一个数据库表。我收到一个错误提示
Error: syntax error at or near "RETURNING".
我了解 JDBC 驱动程序存在某种错误。正如我发现的那样。 Postgres JDBC driver: PSQLException: syntax error at or near RETURNING
看来我需要设置 Quirk Mode。但我不知道该怎么做。
现在我有
Connection dbConnection;
dbConnection = DriverManager.getConnection(connectionString,username,password);
Statement st = dbConnection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
st.executeUpdate(query,Statement.RETURN_GENERATED_KEYS);
我不知道我应该在哪里设置怪癖模式
编辑:
我很抱歉遗漏了细节。它带我通过了引导的方式。
声明是通过
st.executeUpdate(query,Statement.RETURN_GENERATED_KEYS);
而SQL是
String employeeTable="CREATE TABLE \"employee\" (\n" +
" \"employee_id\" serial,\n" +
" \"employee_first_name\" TEXT,\n" +
" \"employee_middle_name\" TEXT,\n" +
" \"employee_last_name\" TEXT,\n" +
" \"employee_dob\" date ,\n" +
" \"employee_ssn\" TEXT NOT NULL DEFAULT '0',\n" +
" \"employee_wages\" FLOAT(30) NOT NULL DEFAULT '0',\n" +
" \"employee_password\" TEXT DEFAULT '0',\n" +
" \"employee_issupervisoer\" BOOLEAN NOT NULL DEFAULT 'false',\n" +
" \"employee_hassupervisoer\" BOOLEAN NOT NULL DEFAULT 'false',\n" +
" \"employee_supervisor_id\" integer,\n" +
" \"employee_clockstatus\" BOOLEAN DEFAULT 'false',\n"+ // True = IN : False = OUT
" \"employee_lastpunch\" timestamp, \n"+
" \"employee_isactive\" BOOLEAN, \n"+
" CONSTRAINT employee_pk PRIMARY KEY (\"employee_id\")\n" +
") WITH (\n" +
" OIDS=FALSE\n" +
");\n";
老实说,我认为 SQL 并不重要。大约 6 个月前,这个声明对我有用。我不知道发生了什么变化,但我从 Postgresql 9.4 更改为 10.7?无论最新的 10.x 稳定版是什么。我将我的 Gradle 更新为
// https://mvnrepository.com/artifact/org.postgresql/postgresql
compile group: 'org.postgresql', name: 'postgresql', version: '42.2.6'
【问题讨论】:
-
查询结果是?
-
"CREATE query" 如果 SQL statement 是
CREATE语句,则它不是 query .SELECT语句是 SQL Query。所有其他 SQL 语句都不是:语句。所以不要打电话给executeQuery,除非它是SELECT声明。请改用executeUpdate。 --- 至于语法错误,当我们看不到正在执行的语句时,您认为我们如何帮助解决这个问题? -
没有语法错误。正如我所说,它是一个简单的 Create statement。如果您阅读了解我发布的链接的问题所在,它应该会给您一些更深入的了解。由于我不够清晰,我认为以一个更明确的问题为例
-
我不是故意粗鲁,但你读过另一篇文章吗?有一个驱动问题,我不知道如何解决。驱动程序在我的 SQL 语句末尾盲目地添加“返回”。它本身不是我的代码,但是有一个解决这个错误的方法。
-
不相关,但是:您不需要标识符周围的所有嵌入双引号。您可以删除它们并使您的 Java 代码更具可读性。
标签: java postgresql jdbc