UCanAccess选择语句与数字通配符给予意想不到的令牌:需要REGEXP_MATCHES

问题描述:

我有一个查询访问,似乎只适用于*通配符,但不是#通配符。UCanAccess选择语句与数字通配符给予意想不到的令牌:需要REGEXP_MATCHES

所以我想排除其中T [5位]是[字段1]之前的所有记录,我只是用T *我创建了一个名为查询访问查询,并把这个在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} 

这项工作非常完美。

但是现在,我需要更加具体,并与牛逼#####

于是,我就改变我的查询保存在我的访问,像这样排除field1的数据:

查询1:

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

在Access中,该拉的查询就好了,从我所看到的在Access没有问题。

但是,如果使用在Java中,复制和粘贴相同的代码,我得到这个错误:

UCAExc:::4.0.2 user lacks privilege or object not found: QUERY1

我试图压缩和修复,同样的错误。我将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 unexpected token: REGEXP_MATCHES required:

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

我能够重现您的问题。在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#####") 
+0

谢谢你这个工作对我来说 – arsarc