SQL 异常:意外令牌 - UCanAccess

SQL Exception : Unexpected Token - UCanAccess

我正在尝试从 Java 程序创建新的 MS Access table。 SQL 查询如下。我收到一条错误消息:

net.UcanacessSQLException:UCAExc:::4.0.1 unexpected token: REQ-MTI

PreparedStatement prepStmt;

String createStmt = "CREATE TABLE [" + tableName + "] ([Test_Case_ID] CHAR (20) PRIMARY KEY, [Test_Name] CHAR (120)," 
    + " [Test_Description] CHAR (100), [Req-MTI] CHAR (15), [Req-Card_ID] CHAR (50), [Req-H19] CHAR (20));";

prepStmt = conn.prepareStatement(createStmt);
prepStmt.executeUpdate();

我不能用下划线代替连字符。我试过将所有 table 名称放在方括号、引号等中,但似乎没有任何效果。我已获取生成的字符串并将其粘贴到 MS Access 查询中,它在那里创建了 table fine。

如有任何帮助,我们将不胜感激。谢谢!

如果列名称包含除字母、数字和下划线以外的任何字符,则名称必须用反引号 (`) 括起来来分隔

所以尝试将您的列名称更改为:

`Req-MTI`

我能够在 UCanAccess 4.0.2 下重现您的问题。它似乎被 CHAR 关键字后面的空格弄糊涂了。如果我将字段指定为 CHAR(20) 而不是 CHAR (20).

,我可以获得 运行 的代码

编辑回复:问题更新

我能够在 UCanAccess 4.0.1 下重现该问题。解决方法是使用 Statement 而不是 PreparedStatement 来执行 DDL。 (甚至不需要如上所述删除空格,至少在 4.0.1 下。)