我在访问中有一个查询,它似乎只适用于*通配符而不是#通配符。
所以我想排除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问题?权限问题?有解决方法吗?
答案 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#####")