Создать оператор, возвращающий ОШИБКУ: синтаксическая ошибка на уровне или около «ВОЗВРАТ» - PullRequest
0 голосов
/ 02 июля 2019

Я хочу создать таблицу базы данных с оператором CREATE.Я получаю сообщение об ошибке: "1001 *

Error: syntax error at or near "RETURNING". 

" Я понимаю, что есть какая-то ошибка с драйвером JDBC.Как я нашел это. Драйвер JDBC Postgres: PSQLException: синтаксическая ошибка в или около 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'

1 Ответ

1 голос
/ 03 июля 2019

Нельзя объединить оператор CREATE TABLE с предложением RETURNING (так как он ничего не «возвращает»).

Когда вы звоните executeUpdate(query,Statement.RETURN_GENERATED_KEYS), вы запрашиваете сгенерированные ключи из оператора DML для возврата. Драйвер JDBC Postgres делает это, добавляя к запросу предложение RETURNING, что, очевидно, не имеет смысла для оператора DDL.

Вместо этого используйте execute(query).

Или executeUpdate(query) (без запроса сгенерированных ключей)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...