创建语句返回错误:“ RETURNING”或附近的语法错误

时间:2019-07-02 19:28:15

标签: java postgresql jdbc

我想用CREATE语句创建数据库表。我说错了

Error: syntax error at or near "RETURNING". 

我了解JDBC驱动程序存在某种错误。当我发现这个。 Postgres JDBC driver: PSQLException: syntax error at or near RETURNING

似乎我需要设置Quirk模式。但是我不确定该怎么做。

现在我有

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'

1 个答案:

答案 0 :(得分:1)

您不能将CREATE TABLE语句与RETURNING子句结合使用(因为它不会“返回”任何内容)。

调用executeUpdate(query,Statement.RETURN_GENERATED_KEYS)时,您要求从DML语句返回生成的密钥。 Postgres JDBC驱动程序通过在查询中添加RETURNING子句来实现此目的-对于DDL语句显然是没有意义的。

改为使用execute(query)

executeUpdate(query)(不要求生成密钥)