Java 带>;的SQL WHERE子句的Jackcess等效项;(“严格大于”条件)

Java 带>;的SQL WHERE子句的Jackcess等效项;(“严格大于”条件),java,ms-access,select,where,jackcess,Java,Ms Access,Select,Where,Jackcess,我想搜索日期列值大于“2014/03/01”的所有行 你怎么能做到这一点?如果没有日期值为'2014/03/01'的行,在没有完整扫描表的情况下如何定位光标 Table table = db.getTable("Facture"); IndexCursor cursor = CursorBuilder.createCursor(table.getIndex("DateIndex")); Date search_date = Date('2014/03/01'); for(Row row : c

我想搜索日期列值大于“2014/03/01”的所有行

你怎么能做到这一点?如果没有日期值为'2014/03/01'的行,在没有完整扫描表的情况下如何定位光标

Table table = db.getTable("Facture");
IndexCursor cursor = CursorBuilder.createCursor(table.getIndex("DateIndex"));

Date search_date = Date('2014/03/01');
for(Row row : cursor.newEntryIterable(search_date)) { ... }

您已经在创建一个
IndexCursor
,因此不需要进行表扫描。只需使用进行
=
搜索,然后跳过精确匹配项(如果有),如下所示:

Table Table=db.getTable(“成员”);
字符串dateColumnName=“DateJoined”;
Column dateColumn=table.getColumn(dateColumnName);
indexcursorcursor=CursorBuilder.createCursor(table.getIndex(dateColumnName));
字符串searchDateAsString=“2014/03/01”;
SimpleDataFormat sdf=新的SimpleDataFormat(“yyyy/MM/dd”);
日期搜索\ u Date=sdf.parse(searchDateAsString);
cursor.findClosestRowByEntry(搜索日期);
if(cursor.isAfterLast()){
System.out.println(String.format(“没有包含%s>=%s”、dateColumnName、searchDateAsString的行”);
}
否则{
//我们希望严格大于,因此跳过相等的行
while(search_date.equals(cursor.getCurrentRowValue(dateColumn))){
如果(!cursor.moveToNextRow())中断;
}
if(cursor.isAfterLast()){
System.out.println(String.format(“没有包含%s>%s”、dateColumnName、searchDateAsString的行”);
}
}
//现在迭代剩余的行
而(!cursor.isAfterLast()){
System.out.println(sdf.format(cursor.getCurrentRowValue(dateColumn));
cursor.moveToNextRow();
}

感谢Gord这是解决方案,但我有另一个问题,我的索引“dateColumnName”有两个CHAMP[日期,代码]。日期是日期,代码是文本。当cursor.findClosestRowByEntry(search_date)被执行时,我得到了以下错误:Java::JavaLang::IllegalArgumentException:给定的列值数目错误,应该是2。我尝试了这个cursor.findClosestRowByEntry(“,search_date”),我得到了以下错误:Java::JavaLang::ClassCastException:Java.lang.String不能转换为Java.lang.Number。@对于([Date],[Code])上的复合索引,如果希望查找只忽略[Code],可以使用cursor.findClosestRowByEntry(search_Date,null)。在您的情况下,您希望最终超过指定的日期,因此可以使用类似于cursor.findClosestRowByEntry(search_date,“zzzzz”)减少查找完成后需要跳过的“search_date.equals”行数。