【问题标题】:Internal Error: Unknown or unimplemented accessor type: 9内部错误:未知或未实现的访问器类型:9
【发布时间】:2015-01-08 10:20:44
【问题描述】:

我们正在运行一个带有连接池的 tomcat 服务器,并且最近随机收到此错误。当我们随机运行一个包中的存储过程时,就会发生这种情况。我自己尝试对这个问题进行一些研究,这导致了这个 Java 类的来源,我认为错误是从这里转储的:http://ora-jdbc-source.googlecode.com/svn/trunk/OracleJDBC/src/oracle/jdbc/driver/T2CCallableStatement.java

我的问题是:9 号访问器类型是什么?它没有在我提供的示例类中定义,但是编写该类的人显然必须有一个访问器列表及其对应的编号,如果可能的话,我想看看,但一直找不到。

我还在错误日志中找到了其他访问器类型编号,例如:6 也出现了。

更新:我找到了一个详细说明数据类型及其代码值的页面,但数据类型 6 和 9 显然不存在,这使得这个错误更加奇怪: https://docs.oracle.com/cd/E11882_01/appdev.112/e10646/oci03typ.htm#LNOCI030

【问题讨论】:

    标签: java multithreading oracle jdbc oracle11g


    【解决方案1】:

    这个问题似乎是在 Java 代码中存在并发问题时引起的。当我们的程序运行线程池时,我们遇到了上述问题,并且程序员错误地认为在每个线程中仅对 SELECT 语句使用相同的连接是可以的(根据 Java Connection 类,它在技术上应该是可以的)。我想这只是表明 Oracle DB 的 Java Connection jar 不是线程安全的。

    【讨论】:

      【解决方案2】:

      我刚遇到同样的问题,但类型是 6。问题是由于未关闭(调用 .close())准备好的语句和保存查询结果的结果集造成的。实例化新的准备好的语句和结果集是不够的,您必须始终关闭它们。经验教训。

      【讨论】:

      • 是的,当驱动程序没有按预期使用时,这似乎是一个问题。不好玩。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-01
      • 2018-04-04
      • 1970-01-01
      相关资源
      最近更新 更多