Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Create语句返回错误:“Returning”处或附近出现语法错误_Java_Postgresql_Jdbc - Fatal编程技术网

Java Create语句返回错误:“Returning”处或附近出现语法错误

Java Create语句返回错误:“Returning”处或附近出现语法错误,java,postgresql,jdbc,Java,Postgresql,Jdbc,我想用create语句创建一个数据库表。我听到一个错误说 Error: syntax error at or near "RETURNING". 我知道JDBC驱动程序存在某种缺陷。当我发现这个的时候。 似乎我需要设置怪癖模式。但我不知道该怎么做 现在我有 Connection dbConnection; dbConnection = DriverManager.getConnection(connectionString,username,password); Statement st

我想用create语句创建一个数据库表。我听到一个错误说

Error: syntax error at or near "RETURNING". 
我知道JDBC驱动程序存在某种缺陷。当我发现这个的时候。

似乎我需要设置怪癖模式。但我不知道该怎么做

现在我有

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 TABLE语句与RETURNING子句组合,因为它不返回任何内容

调用executeUpdatequery、Statement.RETURN\u GENERATED\u KEYS时,您请求返回DML语句中生成的密钥。PostgresJDBC驱动程序通过向查询中添加RETURNING子句来实现这一点,这显然与DDL语句无关

改用executequery


或者在不请求生成的键的情况下执行更新查询

,查询为?创建查询如果SQL语句是CREATE语句,则它不是查询。SELECT语句是SQL查询。并非所有其他SQL语句都是:语句。所以不要调用executeQuery,除非它是SELECT语句。改为使用executeUpdate。-至于语法错误,当我们看不到正在执行的语句时,您认为我们如何帮助解决这个问题?没有语法错误。正如我所说的,这是一个简单的Create语句。如果你读了这篇文章,对我发布的链接的问题有了一个大致的了解,它应该会给你一些更深入的见解。由于我的表达能力不强,所以我认为最好给出一个定义更明确的问题作为例子。我无意粗鲁,但你读过另一篇文章吗?有一个司机的问题,我不知道如何解决。驱动程序在SQL语句末尾盲目地添加了一个返回。这不是我的代码本身,但是有一个解决这个bug的方法。不相关,但是:您不需要在标识符周围嵌入所有的双引号。您可以删除它们,使Java代码更具可读性。感谢您花时间阅读问题和支持链接,并制定回答我的问题和修复我的问题的答案。我希望我能再投你10次票,从技术上讲,一个司机应该支持它,并把它当作一个正常的声明来处理。来自:如果SQL语句不是INSERT语句,或者SQL语句不能返回自动生成的键,则驱动程序将忽略该标志。此类语句的列表是特定于供应商的。因此,虽然您通常不会以这种方式执行CREATETABLE语句,但驱动程序应该正确处理它。