当前位置: 首页 > 知识库问答 >
问题:

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

姜奇
2023-03-14

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

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

共有1个答案

庞修贤
2023-03-14

这是我见过的第一个关于它的问题。您可以在UCanAccess web站点的“Getting Start”选项卡(页面末尾)中看到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()来获取包装的值。

 类似资料:
  • 问题内容: 我正在尝试使用UCanAccess查询MS Access .accdb文件。除查询多值字段外,其他所有操作都很好。例如,那些在MS Access设计视图的表的“行源”字段的“查找”选项卡中具有条目的条目。当我尝试输出结果时,我的代码崩溃: 可以很好地返回ResultSet,并且可以正常打印singleValue,但是如果我尝试从ResultSet中打印multiValue,则会引发以下

  • 我试图编译一个从SourceForge得到的仍在开发中的项目。这是它的地址:。https://sourceforge.net/p/groove/code/5475/tree/groove/trunk/我知道这个项目经过了很好的验证,它没有任何错误,但是当我要编译它的时候,我遇到了这个编译错误: 错误在这个文件的第370行:https://sourceforge.net/p/groove/code/

  • 我定义jackoson序列化器并将其添加到java类中,如下所示: 编译器出现以下错误: 注释的定义为: 如果我从ReportFilterDeserializer中删除泛型attibute,它将通过编译。我不明白编辑为什么抱怨。

  • 问题内容: 我们需要将一列,即数据类型为datetime的Start_Date更改为bigint。对于现有数据,我们有诸如“ 2010-01-01 00:00:00”之类的记录,应将其转换为bigint并返回诸如“ 20100101000000”之类的值。我尝试使用convert和cast fn,但没有得到期望的输出。谁能帮我这个忙。 问题答案: 首先将datetime转换为varchar。 然后

  • 我试图在if语句中调用一个方法,但我总是得到以下错误。 不兼容的类型:java.lang.String不能转换为boolean