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

如何防止这种异常?java.sql.SQLException:无法转换为内部表示形式:

葛飞扬
2023-03-14
问题内容

我的代码在以下行(此行的第2行)上引发了上述异常:

final ArrayDescriptor tParamArrayDescriptor = ArrayDescriptor.createDescriptor("MY_SYSTEM.T_PARAM_ARRAY", databaseHandler.getConnection());
final ARRAY oracleArray = new ARRAY(tParamArrayDescriptor, databaseHandler.getConnection(), myObjects.toArray());

它给了我以下例外:

java.sql.SQLException: Fail to convert to internal representation:

myObjects是以下POJO的ArrayList:

public class MyObject
{
    private String name;
    private String surname;

    private int age;

    ...

    // Accessors etc..

}

T_PARAM_ARRAY数据库上看起来如下:

create or replace
TYPE               T_PARAM_ARRAY AS OBJECT (NAME VARCHAR2(50), SURNAME VARCHAR2(50), AGE NUMBER(1));

经过一些研究,我认为我的POJO和数据库类型之间的数据类型映射不正确匹配。我有理由相信,字符串匹配是在VARCHAR2确定,但我认为这是一个问题转换intNUMBER

我尝试使用BigDecimal,但这并不能改善情况。

有什么建议?

编辑:根据Oracle文档:Where intArray is an oracle.sql.ARRAY, corresponding to a VARRAY of type NUMBER. The values array contains an array of elements of type java.math.BigDecimal, because the SQL NUMBER datatype maps to Java BigDecimal by default, according to the Oracle JDBC drivers.


问题答案:

我认为您需要自己构建数组,请参见以下问题:“如何调用在Java中包含用户定义类型的oracle存储过程?”一个可行的例子。



 类似资料:
  • 我正在使用jdb dubugger,它的问题是在每个捕获到的异常上都会停止,尽管我没有执行任何捕获。。。。声明。在类加载过程中,有数百个: 发生异常:java。io。FileNotFoundException(uncaught)“thread=thread-2-EmulatorEngine”,sun。其他。URLClassPath$JarLoader。ensureOpen(),行=634 bci=

  • 问题内容: 我在DAO中有以下内容,当我执行时,我得到了 java.sql.SQLException:无法转换为内部表示形式:test.Project@843 DAO代码 我该如何解决这个问题? 编辑1 问题答案: 不幸的是,这比人们预期的要复杂。您必须使用对象,描述符,最后使用。下面是一个工作示例。 执行主类后检查表的内容: 输出:

  • 问题内容: 您好,我正在使用developenig Java Web应用程序,并且在尝试使用hibernate模式获取数据时遇到了下一个异常 这里stacktrace 这是我的代码 这是我的对象 这是映射 我正在使用Oracle Weblogic 12c服务器 问题答案: 通过将我的pom.xml中的依赖项更改为较旧的版本4.3.4进行了修复。最终错误已在4.3.4。最终版本更改为4.2.7。 不

  • Deal和DealDocument类是相同的。Deal document类如下所示: 你觉得问题可能是什么?它似乎是随机出现的,好像它工作正常,但在时间内系统退化 *更新*:这是我如何配置模型映射器的:ModelMapper.GetConfiguration().SetAmbiguity忽略(false).SetFieldMatchingEnabled(true).SetMatchingStrat

  • 问题内容: 在golang中,如何将字符串转换为二进制字符串?示例:“ CC”变为10000111000011 问题答案: 这是一种简单的方法: 正如我在对另一个答案的评论中所包括的那样,您还可以使用变体,该变体将在字符串中用前导零填充,如果您需要或想要表示8位…但是,如果您的字符需要8位以上,则不会有任何区别表示,例如希腊字符: Φ1110100110 λ1110111011 μ11101111

  • 尝试将实体转换为dto时,使用modelmapper时出错。 我的java类是: 用户类: Rol等级: 用户到类: 当我尝试映射用户时。类到UserDTO。当modelmapper出现下一个错误时初始化: 此外,我尝试使用此modelmapper配置: 错误: 如果RolDTO类是外部化的,模型映射器工作正常。我希望你能帮助我解决这个问题。 谢谢。