gpt4 book ai didi

java - Jackcess 获取排序表或其中最大索引

转载 作者:行者123 更新时间:2023-11-30 04:31:39 24 4
gpt4 key购买 nike

我想在像这样创建的 jackcess 表中插入一行;

Table t = Database.open(new File(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; 并能够插入。所以我的问题显然是我不知道如何获取索引或排序表。

显然,计算行数是一个糟糕的解决方案。反正我只是尝试了一下。

最佳答案

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

import java.io.File;
import java.io.IOException;
import com.healthmarketscience.jackcess.*;

public class jackcessTest {

public static void main(String[] args) {
try {
Table table = DatabaseBuilder.open(new File("C:\\Users\\Public\\Database1.accdb")).getTable("JackcessTest");
int LargestKey = 0;
// the following loop is modified from
// https://stackoverflow.com/a/19304549/2144390
// for Jackcess 2.0
for(Row row : CursorBuilder.createCursor(table.getPrimaryKeyIndex())) {
LargestKey = (int)row.get("ID");
}
try {
table.addRow(LargestKey + 1, "MyName", "MyLastName");
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Done.");
}
}

关于java - Jackcess 获取排序表或其中最大索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14506257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com