DatabaseExampleSource -转换为内部表示失败

nicugeorgiannicugeorgian 成员职位:31大师
2018年11月编辑 帮助
你好,

当使用DatabaseExampleSource与Oracle数据库系统,我得到以下警告几次:

无法读取数据库数据:转换为内部表示失败[类java.sql.SQLException]

你知道这到底是什么意思吗?

很多谢谢!

地理
标记:

答案

  • nicugeorgiannicugeorgian 成员职位:31大师
    实际上,我注意到有人试图将每个表列的值转换为以下每种类型:String, Int, Double。

    如果列的值为string,则在尝试将该值转换为Int和Double类型时发出上述警告。

    我仍然不清楚为什么这些尝试转换为String, Int和Double类型…什么好主意吗?

    地理
  • IngoRMIngoRM 管理员、版主、员工、RapidMiner认证分析师、RapidMiner认证专家、社区经理、RMResearcher、会员、大学教授职位:1751年RM创始人
    嗨,地理,

    可能是您将属性的值类型定义为数值,但数据列实际上包含字符串?

    欢呼,
    Ingo
  • nicugeorgiannicugeorgian 成员职位:31大师
    嗨Ingo,

    谢谢你的回答。我不太明白你在说什么。

    当我运行包含DatabaseExampleSource操作符的Java程序时,我在控制台上得到了这个警告。

    我认为它与DatabaseExampleSource操作符的“数据管理”参数有关。该参数决定数据如何在内部表示。我认为该参数的默认值是“double_array”。

    我有数字属性和名义(分类)属性。我不清楚如何使用DatabaseExampleSource操作符(以及我随后使用的Weka学习器)指定属性的类型。:(

    任何想法?

    很多谢谢!

    欢呼,
    地理
  • IngoRMIngoRM 管理员、版主、员工、RapidMiner认证分析师、RapidMiner认证专家、社区经理、RMResearcher、会员、大学教授职位:1751年RM创始人
    你好,地理,

    好吧,我挖得更深了一点。首先,它与“datammanagement”参数无关。这只是定义了当数据加载到内存中时,RapidMiner如何在内部表示数据。但这不会导致这里的问题,因为错误是Oracle特定的错误,错误代码为17059。我搜索了短语“无法转换为内部表示[类java.sql]”。在谷歌中找到了这个链接:

    http://www.dbmotive.com/oracle_error_codes.php?errcode=17059

    似乎您的Oracle数据库包含至少一列的Oracle数据类型是JDBC驱动程序不知道的/ Java定义的类型。我们目前支持这些类型

    案例类型。长整型数字:
    案例类型。整数:
    案例类型。非常小的整数:
    案例类型。短整型:
    返回Ontology.INTEGER;

    案例类型。浮动:
    案例类型。真实:
    案例类型。小数:
    案例类型。双:
    返回Ontology.REAL;

    案例类型。数字:
    返回Ontology.NUMERICAL;

    案例类型。字符:
    案例类型。VARCHAR:
    案例类型。CLOB:
    案例类型。二:
    案例类型。一点:
    案例类型。LONGVARBINARY:
    案例类型。团:
    案例Types.JAVA_OBJECT:
    案例类型。结构:
    案例类型。VARBINARY:
    案例类型。用LONGVARCHAR:
    返回Ontology.NOMINAL;

    案例类型。日期:
    案例类型。时间:
    案例类型。时间戳:
    返回Ontology.ORDERED;

    默认值:
    返回Ontology.NOMINAL;
    返回值显示将把数据库的列类型转换为哪个RapidMiner属性。

    您能显示select语句和表的模式吗?也许我们可以找出是哪种类型导致了这里的问题,也许这可以通过简单地将其添加到上面所示的类型定义中来解决。

    谢谢,
    Ingo
  • nicugeorgiannicugeorgian 成员职位:31大师
    你好,

    谢谢你的回答。

    查询很简单:SELECT * FROM RM_INPUTDATA

    下面是表RM_INPUTDATA的(某种程度上简化的)设计:

    属性1:数字(双)
    Attribute2: Text (size 3)
    属性3:Text (size 2)
    属性4:Text (size 12)
    Attribute5: Text (size 5)
    属性7:Text (size 8)

    这是典型的消息,我得到(在控制台)为每一个表记录:

    attribute1 -->字符串:'3243',Int: '3243',双精度:'3243.0',缺失:'false'
    ……
    attribute4 --> String: 'GREC '无法读取数据库数据:转换为内部表示失败[class java.sql.]无法读取数据库数据:转换为内部表示失败[类java.sql. sql]。SQLException],缺失:'false'
    ……

    这里,attribute4被定义为Text类型(大小为12),但其值的长度为4。这有问题吗?: - \

    欢呼,
    地理
  • IngoRMIngoRM 管理员、版主、员工、RapidMiner认证分析师、RapidMiner认证专家、社区经理、RMResearcher、会员、大学教授职位:1751年RM创始人
    啊,现在我明白了: D

    我没有注意到您使用了RM 4.1beta(取自另一个主题)。在这个测试版中有一个调试消息,它在最终版本4.1中被删除,它试图将每个字段转换为字符串、双精度、整数,而不依赖于实际的列类型。这条线

    attribute1 -->字符串:'3243',Int: '3243',双精度:'3243.0',缺失:'false'
    是由什么东西产生的

    system . out。println(attributeName + "--> String: " + resultSet.getString(col) + ", Int: " + resultSet.getInt(col)....);
    错误消息只是告诉您无法从文本中获取数字。所以这里没有什么问题:它只是测试版中的调试输出,现在已经消失了。只要更新到最新版本,你就不会再收到这些消息了。

    欢呼,
    Ingo
  • nicugeorgiannicugeorgian 成员职位:31大师
    mierswa写道:


    错误消息只是告诉您无法从文本中获取数字。所以这里没有什么问题:它只是测试版中的调试输出,现在已经消失了。只要更新到最新版本,你就不会再收到这些消息了。

    现在很清楚了:)我已经更新到最新版本了。

    非常感谢,英戈!
登录注册置评。