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

我正在尝试使用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,则会引发以下错误

线程“主”中的异常net.ucanaccess.jdbc.ucanaccesssqlException:转换中的数据类型不兼容:从sql类型OTHER到java.lang.String,值:org.hsqldb.types.JavaObjectData的实例
我曾尝试查询存储在.accdb中的查询,但这不起作用,因为它只会触发原始查询,并返回相同的ResultSet.

我缺少一些简单的东西吗?还是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()以获取包装的值.

相关文章

连接数据库的方式:第一种方式:ODBC:开放数据库连接是微软...
JDBCRequest 使用VariableNamesmysql:数据库连接池对象var...
 1.JDBCDBC(JavaDataBaseConnectivity):Java数据库连接技术...
1.需要jar包的支持:java.sqljavax.sqlmysql-conneter-java....
1.简介Activiti是一个业务流程管理(BPM)框架,它是覆盖了业务...
1.JDBC体系系统一组规范:接口JDBC接口(API)包括两个层次:...