UcanAccess 中的 DELETE 函数抛出奇怪的异常

Posted

技术标签:

【中文标题】UcanAccess 中的 DELETE 函数抛出奇怪的异常【英文标题】:DELETE Function in UcanAccess throws strange exception 【发布时间】:2015-03-10 07:52:08 【问题描述】:

自从 Java 1.8 消除了 JDBC 桥(我们仍然感到悲痛)并迁移到 UcanAccess 之后,我一直在调试 SQL 代码,过去从未给我带来任何问题。其中一个语句是:

DELETE TreatmentRecords.DateGiven, TreatmentRecords.TimeGiven, SInformation.Surname, SInformation.FirstNames, TreatmentRecords.Diagnosis, TreatmentRecords.*
FROM SInformation INNER JOIN TreatmentRecords ON SInformation.SID = TreatmentRecords.SID
WHERE (((TreatmentRecords.DateGiven)=#2015-03-07#) AND ((TreatmentRecords.TimeGiven)='17;16') AND ((SInformation.Surname)='Doe') AND ((SInformation.FirstNames)='John') AND ((TreatmentRecords.Diagnosis)='Headache'));

在 Access 本身中执行时,我绝对不会遇到任何错误或问题。 但是 Ucancess 抛出以下异常:

net.ucanaccess.jdbc.UcanaccessSQLException: unexpected token: TREATMENTRECORDS required: FROM

任何关于为什么的想法都会受到高度赞赏!

【问题讨论】:

【参考方案1】:

这是一个非标准的 SQL 删除语句,即使 Jet 引擎支持,ucanaccess 也不支持。这没什么奇怪的。 因此,您必须为此使用标准 SQL。

编辑 例如,像这样(我没有添加所有条件):

   DELETE FROM TreatmentRecords tr WHERE 
    tr.DateGiven=#2015-03-07# AND EXISTS 
(SELECT * FROM SInformation s WHERE s.SID=tr.SID AND  s.Surname='Doe')

【讨论】:

您能否建议上面的标准 SQL 语句的外观? 请看上面;-)

以上是关于UcanAccess 中的 DELETE 函数抛出奇怪的异常的主要内容,如果未能解决你的问题,请参考以下文章

ucanaccess :带有空格的意外令牌

为啥在析构函数中抛出异常时不调用重载删除?

删除 Kafka StateStore 中的记录不起作用(在 .delete(key) 上抛出 NullPointerException)

ucanaccess SQL 异常:游标状态无效:已识别游标未打开

UCanAccess 中的“语句意外结束”错误

Boomi Timer 中的 uCanAccess 错误已取消