我想使用CREATE语句创建数据库表。我说错了
Error: syntax error at or near "RETURNING".
我了解JDBC驱动程序存在某种错误。当我发现这个。 Postgres JDBC驱动程序:PSQLException: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'
您不能将CREATE TABLE
语句与RETURNING子句结合使用(因为它不会“返回”任何内容)。
调用时,executeUpdate(query,Statement.RETURN_GENERATED_KEYS)
您要求从DML语句返回生成的密钥。Postgres JDBC驱动程序通过RETURNING
在查询中添加一个子句来实现此目的-对于DDL语句显然是没有意义的。
使用execute(query)
代替。
或executeUpdate(query)
(不要求生成密钥)
感谢您抽出宝贵的时间阅读问题和支持链接,并提出答复来回答我的问题并解决我的问题。希望我能再投票10次
从技术上讲,驱动程序应该支持它,并按一般说明进行处理。来自apidoc:“如果SQL语句不是INSERT语句,或者不是能够返回自动生成的键的SQL语句,则驱动程序将忽略该标志(此类语句的列表特定于供应商)。” 因此,尽管您通常不会以这种方式执行create table语句,但驱动程序应正确处理它。