SQL异常:意外令牌 - UCanAccess

时间:2017-08-24 17:13:19

标签: java ms-access jdbc ucanaccess

我试图从Java程序创建一个新的MS Access表。 SQL查询如下。我收到一个错误说:

  

net.UcanacessSQLException:UCAExc ::: 4.0.1意外令牌: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();

我不能使用下划线而不是连字符。我已经尝试将所有表名放在方括号,引号等中,但似乎没有任何效果。我已经将生成的字符串粘贴到MS Access查询中,并在那里创建表格。

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

如果列名包含除字母,数字和下划线之外的任何字符,则必须通过将其括在后引号(`)

中来对名称进行分隔。

因此请尝试将列名更改为:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener(){
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy){
            if (dy<0 && !fab.isShown())
                fab.show();
            else if(dy>0 && fab.isShown())
                fab.hide();
        }

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
        }
    });

答案 1 :(得分:1)

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

编辑重新:问题更新

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