Ошибка SQL или отсутствует база данных (рядом с синтаксической ошибкой «,»)

-3

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

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();
  • 0
    Почему у вас есть скобки вокруг имен столбцов в select? Выбор также должен возвращать то же количество столбцов, которое вы пытаетесь вставить.
  • 0
    Плюс в вашем утверждении есть один параметр, но вы пытаетесь связать 6?
Показать ещё 2 комментария
Теги:

1 ответ

0

Проблемы с вашим выражением INSERT включают в себя:

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

  • Вы пытаетесь выбрать использование столбцов в скобках, и в любом случае эти три столбца НЕ будут соответствовать 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;

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

Изображение 166952

то есть назначение Сью Белл не было добавлено из-за УНИКАЛЬНОГО конфликта ограничений, который был проигнорирован, поэтому нет ошибки.

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

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
  • 0
    Благодарю. Я разобрался.
  • 0
    Это хорошо. Если вам помог ответ, пожалуйста, отметьте его как ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню