UCanAccess 中多值字段的解决方法:“转换中的数据类型不兼容:来自 SQL 类型 OTHER”?

2023-11-30

我正在尝试使用 UCanAccess 查询 MS Access .accdb 文件。一切都很好,除了当我查询多值字段时。例如,在 MS Access 设计视图中表字段的“查找”选项卡的“行源”中具有条目的那些。当我尝试输出结果时,我的代码崩溃了:

ResultSet rslt = stmt.executeQuery("SELECT [singleValue], [multiValue] FROM [TableName];");
int count = 0;
while (rslt.next())
    System.out.println(count++ + "\t" + rslt.getString(1) + "\t" + rslt.getString(2));

ResultSet 返回正常,singleValue 打印正常,但如果我尝试从 ResultSet 打印 multiValue,则会引发以下错误:

线程“main”中出现异常 net.ucanaccess.jdbc.UcanaccessSQLException:转换中的数据类型不兼容:从 SQL 类型 OTHER 到 java.lang.String,值:org.hsqldb.types.JavaObjectData 的实例

我尝试查询存储在 .accdb 中的查询,但这不起作用,因为它只是触发原始查询,并返回相同的结果集。

我是否错过了一些简单的事情,或者这是 UCanAccess 无法处理的事情?


这是我见过的第一个问题。 您可以在 ucanaccess 网站的“入门”选项卡(位于页面末尾)中查看 UCanAccess 的复杂类型用法示例。 这是一个 junit 测试用例:https://sourceforge.net/p/ucanaccess/code/HEAD/tree/ucanaccess/trunk/src/test/java/net/ucanaccess/test/ComplexTest.java(参见 testComplex 方法)。

特别是你不能打电话rslt.getString(2)但必须使用rslt.getObject(2)。 您将获得数据的 ucanaccess 包装器。 如果您想获取描述数据内容的字符串,您可以使用rslt.getObject(2).toString()。 包装类是:

net.ucanaccess.complex.Attachment,
net.ucanaccess.complex.SingleValue,
net.ucanaccess.complex.Version.

在你的例子中,rslt.getObject(2)应该返回一个数组net.ucanaccess.complex.SingleValue。 然后,您可以对每个数组元素调用 singleValue.getValue() 方法来获取包装的值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UCanAccess 中多值字段的解决方法:“转换中的数据类型不兼容:来自 SQL 类型 OTHER”? 的相关文章

随机推荐