【问题标题】:Inconsistent java and sql object typesjava和sql对象类型不一致
【发布时间】:2015-07-20 14:51:57
【问题描述】:

在 jdbc 问题上需要一点帮助。

我真的很难找到解决这个问题的方法。我对 JDBC 没有太多经验,而且它看起来对新手不太友好。如果有人可以提供帮助,将不胜感激。通过帮助,我的意思是向我指出其他资源,如果您可以提供直接解决方案,甚至更好。

异常是在 oracle.sql.STRUCT.java:51 中创建的

throw new SQLException("Cannot construct STRUCT instance, invalid connection");

并在以下代码的最后一行抛出:

SimpleJdbcCall simpleJdbcCall = getSimpleJDBCCall();
con = simpleJdbcCall.getJdbcTemplate().getDataSource().getConnection().getMetaData().getConnection();

WLConnection wc = (WLConnection) con;            
Connection vendorConn = wc.getVendorConnection();

con.setAutoCommit(false);

Object[] custIdentifier = { null, new Long(125435345L)};

StructDescriptor structDesc =         StructDescriptor.createDescriptor("O_CUSTOMER_TYPE_CID_PID", vendorConn);

STRUCT struct = new STRUCT(structDesc, vendorConn, custIdentifier);
STRUCT[] structArray = new STRUCT[] { struct };

ArrayDescriptor des = ArrayDescriptor.createDescriptor("T_CUSTOMER_TYPE_CID_PID", vendorConn);
ARRAY array = new ARRAY(des, vendorConn, structArray);

ArrayDescriptor desEvnt = ArrayDescriptor.createDescriptor("T_EVENT_TYPE_ID", vendorConn);
ARRAY arrayEvnt = new ARRAY(desEvnt, vendorConn, events);

StructDescriptor fltDetailsStructDesc =
                StructDescriptor.createDescriptor("O_FLIGHT_DETAILS", vendorConn);

DATE flightDateUTC = new DATE(flightDt);
NUMBER flightNum = new NUMBER(fltNo);
Object[] fltDetailFields = new Object[] { flightNum, flightDateUTC };

// Exception thrown in constructor below
STRUCT fltDetailsStruct = new STRUCT(fltDetailsStructDesc, vendorConn,     fltDetailFields);

我使用的是 ojdbc6 版本 11.2.0.4

预期的 SQl 对象是:

TYPE O_FLIGHT_DETAILS AS OBJECT 
( 
FLIGHT_NO NUMBER(5), -- Marketing Flight Number 
UTC_DEP_DATE Date, -- Scheduled Flight departure Date in UTC 
BKG_DT DATE -- Flight Booking date in UTC 
);

任何帮助,非常感谢。

【问题讨论】:

    标签: java oracle jdbc


    【解决方案1】:

    我认为问题如下:

    根据 SQL 对象,“O_FLIGHT_DETAILS”对象的 StructDescriptor 需要一个包含 3 个值的数组。由于提供的数组仅包含 2 个值,因此发生不匹配并引发异常。错误消息'inconsistent java and sql object types'是准确的。

    我将 fltDetailFields 实例化行改为:

    Object[] fltDetailFields = new Object[] { flightNum, flightDateUTC, null };
    

    它按预期工作。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2013-10-16
    • 1970-01-01
    • 2010-11-07
    • 2023-03-07
    相关资源
    最近更新 更多