gpt4 book ai didi

java - 如何更改 SortOrder 以避免 "unsupported collating sort order"错误?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:45 33 4
gpt4 key购买 nike

我一直在使用来自第三方客户端的 .mdb 数据库开发一个程序。一切都很好,直到我尝试更新数据库中的元素。 sortOrder 字段不正确。我试图用 MS Access 将其更改为通用,但没有成功。执行更新查询时收到的消息是:

java.lang.IllegalArgumentException: Given index Index@150ab4ed[
name: (EXART) PrimaryKey
number: 2
isPrimaryKey: true
isForeignKey: false
data: IndexData@3c435123[
dataNumber: 2
pageNumber: 456
isBackingPrimaryKey: true
isUnique: true
ignoreNulls: false
columns: [
ReadOnlyColumnDescriptor@50fe837a[
column: Column@636e8cc[
name: (EXART) ARCodArt
type: 0xa (TEXT)
number: 0
length: 30
variableLength: true
compressedUnicode: true
textSortOrder: SortOrder[3082(0)]
]
flags: 1
]
]
initialized: false
pageCache: IndexPageCache@3a62c01e[
pages: (uninitialized)
]
]
] is not usable for indexed lookups due to unsupported collating sort order SortOrder[3082(0)] for text index
at com.healthmarketscience.jackcess.impl.IndexCursorImpl.createCursor(IndexCursorImpl.java:111)
at com.healthmarketscience.jackcess.CursorBuilder.toCursor(CursorBuilder.java:302)
at net.ucanaccess.commands.IndexSelector.getCursor(IndexSelector.java:150)
at net.ucanaccess.commands.CompositeCommand.persist(CompositeCommand.java:83)
at net.ucanaccess.jdbc.UcanaccessConnection.flushIO(UcanaccessConnection.java:268)
at net.ucanaccess.jdbc.UcanaccessConnection.commit(UcanaccessConnection.java:169)
at cultifortgestio.EntradaEixidaDades.Insercio(EntradaEixidaDades.java:76)

如您所见,Access 根本没有改变sortOrder,我认为应该是1033,而且一直是3082。有没有办法改变这个?正如我所说,更改 Access 并执行压缩和修复数据库对我不起作用。

最佳答案

与其他类似情况一样,解决方案是更改受影响数据库的排序顺序。这通常由

  • 在 Access 中打开数据库,
  • 将“New database sort order”(见下面的截图)更改为“General - Legacy”,然后
  • 执行压缩和修复数据库操作。

AccessOptions.png

但是,这种情况下的问题是 Windows 区域设置设置为“西类牙语”,因此 Access 中的“常规”排序选项不会映射到 UCanAccess(实际上是 Jackcess)可以更新的值。提问者的解决方案是暂时将他们的 Windows 区域设置更改为“英语...”,执行上述步骤更改数据库排序顺序,然后再将 Windows 区域设置更改回来。

对于那些不想弄乱他们的 Windows 区域设置的人来说,另一种解决方案是让 UCanAccess 通过 newDatabaseVersion 选项创建一个新的空数据库文件,例如,

String connStr = "jdbc:ucanaccess://C:/someplace/new.accdb;newDatabaseVersion=V2010";
try (Connection conn = DriverManager.getConnection(connStr)) {
}

在 Access 中打开新数据库,然后使用导入功能将旧数据库文件中的表传输到新数据库中。 UCanAccess 创建的数据库文件将具有与更新操作兼容的排序顺序。

关于java - 如何更改 SortOrder 以避免 "unsupported collating sort order"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31948096/

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