例程(get_data_type)无法解析

问题描述 投票:0回答:2

我刚刚更新了我的应用程序上的 informix jdbc 驱动程序(从 3.0 到 V4.10.JC4DE),在尝试与 informix 9 连接时出现以下错误。

java.sql.SQLException: Routine (get_data_type) can not be resolved.
    at com.informix.jdbc.IfxSqli.a(IfxSqli.java:3130)
    at com.informix.jdbc.IfxSqli.D(IfxSqli.java:3412)
    at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2325)
    at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2250)
    at com.informix.jdbc.IfxSqli.executeStatementQuery(IfxSqli.java:1485)
    at com.informix.jdbc.IfxSqli.executeStatementQuery(IfxSqli.java:1465)
    at com.informix.jdbc.IfxResultSet.a(IfxResultSet.java:211)
    at com.informix.jdbc.IfxStatement.executeQueryImpl(IfxStatement.java:1064)
    at com.informix.jdbc.IfxStatement.executeQuery(IfxStatement.java:236)
    at com.informix.jdbc.IfxDatabaseMetaData.getColumns(IfxDatabaseMetaData.java:3549)
    at com.mchange.v2.c3p0.impl.NewProxyDatabaseMetaData.getColumns(NewProxyDatabaseMetaData.java:3968)
    at org.hibernate.tool.hbm2ddl.TableMetadata.initColumns(TableMetadata.java:197)
    at org.hibernate.tool.hbm2ddl.TableMetadata.<init>(TableMetadata.java:58)
    at org.hibernate.tool.hbm2ddl.DatabaseMetadata.getTableMetadata(DatabaseMetadata.java:113)
    ... 54 more

新驱动程序在 Informix 11 上运行良好。不幸的是,我必须支持与 Informix 9 的连接。

java jdbc informix
2个回答
1
投票

不幸的是,Informix 9 是一个非常非常老的引擎。我认为您应该升级(或告诉您的客户升级)到更新且受支持的版本。简单的升级应该会给他们带来许多新功能、更好的性能(至少提高 40%),当然还有更稳定的引擎。

实际上它确实不支持版本9。在产品发行说明页面上,您会看到:

“要使用 IBM Informix JDBC 驱动程序连接到 IBM Informix 数据库,您必须使用以下 IBM Informix 数据库服务器之一:

Version 11.50, 11.70, or 12.10
IBM Informix Extended Parallel Server, Version 8.3 or later


0
投票

这里是 Java 开发新手。 我在尝试使过程调用返回一个对象进行测试时遇到了这个问题

相反,为输出创建一个投影接口并让函数返回该接口。

Jpa接口投影:https://www.baeldung.com/spring-data-jpa-projections#1-close-projections

不起作用:

public interface AnyInterface extends JpaRepository<Entity,Pk> {
  @Procedure("procedure_name")
  Object doProcedure(@Param("param1") String name);
}

工作过:

public interface AnyInterface extends JpaRepository<Entity,Pk> {
  @Procedure("procedure_name")
  ProjectionOutput doProcedure(@Param("param1") String name);
}

并在控制器中,将调用

repo.doProcedure(string)
的函数注释为
@Transactional(readOnly = true)
来自
org.springframework.transaction.annotation
处理这个错误:

您尝试在没有周围事务的情况下执行 @Procedure 方法,该事务保持连接打开,以便实际上可以使用 ResultSet。确保消费者代码使用 @Transactional 或任何其他声明(只读)事务的方式。

© www.soinside.com 2019 - 2024. All rights reserved.