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 下。)
我正在尝试从 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 下。)