Java Jackcess获取一个排序表或其中最大的索引

Java Jackcess获取一个排序表或其中最大的索引,java,ms-access,insert,indexing,jackcess,Java,Ms Access,Insert,Indexing,Jackcess,我想在jackcess表中插入一行,该表是这样创建的 Table t=Database.open(新文件(dbUrl)).getTable(tname) 通常,如果我使用的是SQL,这将是对其进行排序的正确时机。尽管如此,我还是查看了文档,没有发现任何内容 无论如何,在得到表之后,我尝试使用插入一行 int id = t.getRowCount() + 1; try { t.addRow(id, "MyName", "MyLastName

我想在jackcess表中插入一行,该表是这样创建的

Table t=Database.open(新文件(dbUrl)).getTable(tname)

通常,如果我使用的是SQL,这将是对其进行排序的正确时机。尽管如此,我还是查看了文档,没有发现任何内容

无论如何,在得到表之后,我尝试使用插入一行

        int id = t.getRowCount() + 1;

        try {
            t.addRow(id, "MyName", "MyLastName");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
但是,由于索引没有排序,我得到以下异常:

java.io.IOException: New row [250, MyName, MyLastName, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null] violates uniqueness constraint for index 
Data number: 5
Page number: 99
Is Backing Primary Key: true
Is Unique: true
Ignore Nulls: false
Columns: [ColumnDescriptor  Name: (CLIENTES) ID_CLIENTE
Type: 0x4 (LONG)
Number: 0
Length: 4
Variable length: false flags: 1]
Initialized: true
EntryCount: 249
    Cache: 
    LeafDataPage[99] 0, 0, (0), [RowId = 93:0, Bytes = 7F 80 00 00  00 , RowId = 6844:0, Bytes = 7F 80 00 01  5C]

at com.healthmarketscience.jackcess.IndexData.addEntry(IndexData.java:571)
at com.healthmarketscience.jackcess.IndexData.addRow(IndexData.java:537)
...
现在,我想可能是因为缺少其他列而失败了,但后来我尝试使用
t.getRowCount()+100
并且能够插入。所以我的问题很明显是我不知道如何得到索引或排序表


显然,计算行数是一个糟糕的解决方案。我还是试过了。

要按排序顺序检索行,您可以遍历索引支持的游标。下面的代码使用答案中描述的技术,以主键顺序遍历表并检索最大的键值。然后添加一个具有下一个最大键值的新行

导入java.io.File;
导入java.io.IOException;
导入com.healthmarketscience.jackcess.*;
公共类测试{
公共静态void main(字符串[]args){
试一试{
Table Table=DatabaseBuilder.open(新文件(“C:\\Users\\Public\\Database1.accdb”)).getTable(“jackcestest”);
int LargestKey=0;
//下面的循环是从
//     https://stackoverflow.com/a/19304549/2144390
//对于Jackcess 2.0
for(行:CursorBuilder.createCursor(table.getPrimaryKeyIndex())){
LargestKey=(int)row.get(“ID”);
}
试一试{
表.addRow(最大键+1,“MyName”、“MyLastName”);
}捕获(IOE异常){
e、 printStackTrace();
}
}捕获(例外e){
e、 printStackTrace();
}
System.out.println(“完成”);
}
}