带有数字通配符的UCanAccess Select语句给出了意外的令牌:需要REGEXP_MATCHES

时间:2017-08-02 16:01:38

标签: java ucanaccess

我在访问中有一个查询,它似乎只适用于*通配符而不是#通配符。

所以我想排除T [5位]在[Field1]中的所有记录之前,我刚刚使用 T * 我在访问名为Query的过程中创建了一个查询并将其放入SQL设计中

查询1

Select [Field1], [Field2], [Table2].[Field3] from [Table1] 
LEFT JOIN [Table1] ON [Table1].[Field1] = [Table2].[Field1] 
where [Field1] NOT LIKE "T*"

Java代码

try(PreparedStatement s = conn.prepareStatement("Select [Field1], [Field2], [Field3] from [Query1] where [Field2] 
BETWEEN ? AND ?")){
s.setDate(1,java.sql.Date.valueOf(df.getValue()));
s.setDate(2,java.sql.Date.valueOf(dfEnd.getValue()));
try(ResultSet rs = s.executeQuery()){ .... etc etc}

这项工作完美无缺。

但是现在,我需要更加具体,并使用 T #####

排除field1数据

所以我尝试更改我的Access中保存的查询,如下所示:

查询1:

Select [Field1], [Field2], [Table2].[Field3] from [Table1] 
LEFT JOIN [Table1] ON [Table1].[Field1] = [Table2].[Field1] 
where [Field1] NOT LIKE "T#####"

在Access中,这可以很好地提取查询,从我看到的内容中没有问题。

但如果我在Java中使用相同的代码,复制并粘贴,我会收到此错误:

  

UCAExc ::: 4.0.2用户缺少未找到的权限或对象:QUERY1

我试过Compact并修复,同样的错误。我将T #####更改回T *,错误消失了。

所以...我试图通过直接去表来解决它,所以在Java中我使用了

Javacode:

 Select [Field1], [Field2], [Table2].[Field3] from [Table1] 
LEFT JOIN [Table1] ON [Table1].[Field1] = [Table2].[Field1] 
where [Field1] NOT LIKE \"T####\" AND [Field2] BETWEEN ? AND ?")){
s.setDate(1,java.sql.Date.valueOf(df.getValue()));
s.setDate(2,java.sql.Date.valueOf(dfEnd.getValue()));
try(ResultSet rs = s.executeQuery()){ .... etc etc}

而这一次,我得到了

  

UCAExc ::: 4.0.2意外令牌:需要REGEXP_MATCHES:

我不确定从哪里开始。我的问题是为什么它不接受##这是一个UCanAccess问题?一个java问题?权限问题?有解决方法吗?

1 个答案:

答案 0 :(得分:1)

我能够重现你的问题。在UCanAccess 4.0.2下,这有效:

SELECT * FROM Table1 WHERE Field1 LIKE "T#####"

但这失败了:

SELECT * FROM Table1 WHERE Field1 NOT LIKE "T#####"

但是,这种解决方法似乎没问题:

SELECT * FROM Table1 WHERE NOT (Field1 LIKE "T#####")