如何更改SortOrder以避免“不支持整理排序顺序”错误?

我一直在使用来自第三方客户端的.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中打开数据库,
  • 将“新数据库排序顺序”(见下面的屏幕截图)更改为“General – Legacy”,然后
  • 执行压缩和修复数据库操作。

AccessOptions.png

但是,这种情况下的皱纹是Windows语言环境设置为“西class牙语”,因此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中打开新数据库,然后使用“导入”function将表从旧数据库文件传输到新数据库。 UCanAccess创建的数据库文件将具有与更新操作兼容的排序顺序。