Ошибка SQL или отсутствует база данных (рядом с синтаксической ошибкой ",") - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть этот запрос с синтаксической ошибкой.Можете ли вы помочь мне найти ошибку, пожалуйста?Я провожу пару часов, и я не могу решить это.Спасибо.

String sql = " INSERT  INTO appointments (patient_firstname, patient_surname, fees, time, date, doctor)"
                 + " SELECT (time, date, doctor)"
                 + " WHERE NOT EXISTS (SELECT * FROM appointments WHERE time = ?)";

pst=conn.prepareStatement(sql);
pst.setString(1,txt_firstname.getText());
pst.setString(2,txt_surname.getText());
pst.setString(3, txt_fee.getText());
pst.setString(4, (String) cbox_time.getSelectedItem());
pst.setString(5,txt_date.getText());
pst.setString(6, (String) cbox_doctors.getSelectedItem());
pst.executeUpdate();

1 Ответ

0 голосов
/ 19 апреля 2019

Проблемы с оператором INSERT включают в себя: -

  • Вы, похоже, пытаетесь выполнить INSERT SELECT, когда значения, которые нужно вставить, получены из предложения SELECT, но вы пытаетесьсмешайте это с ценностями.Два типа не могут быть объединены.

  • Вы пытаетесь выбрать использование столбцов в скобках, и в любом случае эти три столбца НЕ будут соответствовать 6 столбцам, необходимым для вставки.

  • У вас есть только 1 ? для привязки, вы пытаетесь связать 6.

Я бы посоветовал вам упроститьвопросы, определяя таблицу с УНИКАЛЬНЫМ ограничением на столбцы доктора, даты и времени.Затем используйте стандарт INSERT OR IGNORE с предложением VALUES.

, например, рассмотрите следующий демонстрационный SQL: -

DROP TABLE IF EXISTS appointments;
CREATE TABLE IF NOT EXISTS appointments (patient_firstname TEXT, patient_surname TEXT, fees REAL, time TEXT, date TEXT, doctor INTEGER, UNIQUE (doctor, date, time));
INSERT OR IGNORE INTO appointments VALUES ('Fred','Bloggs',100.50,'10:00','2019-01-01',1);
INSERT OR IGNORE INTO appointments VALUES ('Mary','Smith',100.50,'10:00','2019-01-01',2);
INSERT OR IGNORE INTO appointments VALUES ('Sue','Bell',100.50,'10:00','2019-01-01',2);
SELECT * FROM appointments;

Это приведет к: -

enter image description here

т.е. назначение Сью Белл не было добавлено из-за конфликта ограничений UNIQUE, который был проигнорирован, поэтому ошибки нет.

Журналсущество: -

DROP TABLE IF EXISTS appointments
> OK
> Time: 0.177s

CREATE TABLE IF NOT EXISTS appointments (patient_firstname TEXT, patient_surname TEXT, fees REAL, time TEXT, date TEXT, doctor INTEGER, UNIQUE (doctor, date, time))
> OK
> Time: 0.084s

INSERT OR IGNORE INTO appointments VALUES ('Fred','Bloggs',100.50,'10:00','2019-01-01',1)
> Affected rows: 1
> Time: 0.083s

INSERT OR IGNORE INTO appointments VALUES ('Mary','Smith',100.50,'10:00','2019-01-01',2)
> Affected rows: 1
> Time: 0.084s

INSERT OR IGNORE INTO appointments VALUES ('Sue','Bell',100.50,'10:00','2019-01-01',2)
> Affected rows: 0
> Time: 0s

SELECT * FROM appointments
> OK
> Time: 0.003s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...