当前位置: 首页 > 面试题库 >

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

崔宇
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中打印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()以获取包装的值。



 类似资料:
  • 我正在尝试使用UCanAccess查询MS Access.accdb文件。除了查询多值字段外,一切都很好。例如,在MS Access的设计视图中的表字段的查找选项卡的行源中有条目的。当我试图输出结果时,我的代码崩溃了: ResultSet返回正常,singleValue打印正常,但是如果试图从ResultSet打印多值,则会引发以下错误: 线程“main”net.ucanaccess.jdbc.u

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

  • 本文向大家介绍SQL Server数据类型转换方法,包括了SQL Server数据类型转换方法的使用技巧和注意事项,需要的朋友参考一下 在SQL Server日常的函数、存储过程和SQL语句中,经常会用到不同数据类型的转换。在SQL Server有两种数据转换类型:一种是显性数据转换;另一种是隐性数据转换。下面分别对这两种数据类型转换进行简要的说明: 1 显式转换 显示转换是将某种数据类型的表达式

  • java: 不兼容的类型: java.util.ArrayList<java.lang.Object>无法转换为java.util.List<springfox.documentation.service.Response> 这是为什么呢 代码如下 package com.gxa.medical.swagger; import org.springframework.http.HttpMethod

  • 问题内容: 一般来说,对于Java和编程,我是一个新手。我正在尝试创建一个简单的程序,您可以在其中猜测我的年龄,如果您是对的,它将说“正确”,如果您错了,它将说“错”。 这是我的代码: 我收到错误消息“不兼容的类型:void无法转换为int”,但代码中没有void类?我知道我的代码可能很糟糕,但是如果你们能为我指出正确的方向,那就太好了。谢谢。 问题答案: 您的程序不必返回in 。相反,您可以将其

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