我在访问中有一个查询,它似乎只能与*通配符一起使用,而不能与#通配符一起使用。
因此,我想排除[Field1]中T [5位数]的所有记录。之前,我只是使用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中,这很好地拉出了一个查询,从我所看到的来看,Access中没有任何问题。
但是,如果我在Java中使用相同的代码进行复制和粘贴,则会收到此错误:
UCAExc ::: 4.0.2用户缺少特权或找不到对象:QUERY1
我尝试了压缩和修复,同样的错误。我将T #####改回T *,错误消失了。
所以...我试图通过直接访问表来解决它,所以在Java中,我使用了
Java代码:
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问题?权限问题?有解决方法吗?
最佳答案
我能够重现您的问题。在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#####")
关于java - 具有数字通配符的UCanAccess Select语句提供意外 token :必需REGEXP_MATCHES,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45465750/