我有语法错误的查询。您能帮我找到错误吗? 我花了几个小时,无法解决。谢谢。
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 :(得分:0)
您的INSERT语句存在的问题包括:-
您似乎正在尝试从SELECT子句获得要插入的VALUES的INSERT SELECT,但是您正在尝试将其与VALUES混合。这两种类型不能合并。
您正在尝试使用括号内的列进行选择,无论如何,这三列将与插入所需的6列不匹配。
您只有1个 ?
要绑定,您正在尝试绑定6。
我建议您通过在Doctor,日期和时间列上使用UNIQUE约束定义表来简化事务。然后将标准 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;
结果为:-
即,由于UNIQUE约束冲突而未添加Sue Bell的约会,因此已将其忽略,因此没有错误。
日志为:-
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