Почему Jboss JCA-адаптер генерирует недопустимый тип столбца SQLException при вызове вызываемого метода setObject? - PullRequest
0 голосов
/ 08 июня 2019

Ниже приведено исключение только при попытке использовать JBoss JNDI (пул соединений) для вставки / обновления записи, когда выборка работает нормально.

Причина: java.sql.SQLException: недопустимый тип столбца в oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical (OraclePreparedStatement.java:10495) в oracle.jdbc.driver.Oternpatate.OrentStatePratePrepapapa.java: 9974) в oracle.jdbc.driver.OraclePreparedStatementWrapper.java:241) в org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.setObject (WrappedPreparedStatement.java:1064) в com.test.PkgTracker.startTracker * (PkgTracker. 1006 * 100) 67*

ObjTracker.java

private static int[] _sqlType = { oracle.jdbc.OracleTypes.NUMBER, oracle.jdbc.OracleTypes.TIMESTAMP,
oracle.jdbc.OracleTypes.VARCHAR, oracle.jdbc.OracleTypes.VARCHAR, oracle.jdbc.OracleTypes.VARCHAR,
oracle.jdbc.OracleTypes.VARCHAR, oracle.jdbc.OracleTypes.VARCHAR, oracle.jdbc.OracleTypes.VARCHAR,
oracle.jdbc.OracleTypes.VARCHAR, oracle.jdbc.OracleTypes.VARCHAR, oracle.jdbc.OracleTypes.VARCHAR,
oracle.jdbc.OracleTypes.VARCHAR, oracle.jdbc.OracleTypes.VARCHAR, oracle.jdbc.OracleTypes.VARCHAR,
oracle.jdbc.OracleTypes.VARCHAR, oracle.jdbc.OracleTypes.TIMESTAMP, oracle.jdbc.OracleTypes.TIMESTAMP,
oracle.jdbc.OracleTypes.TIMESTAMP, oracle.jdbc.OracleTypes.TIMESTAMP, oracle.jdbc.OracleTypes.NUMBER,
oracle.jdbc.OracleTypes.NUMBER, oracle.jdbc.OracleTypes.VARCHAR, oracle.jdbc.OracleTypes.NUMBER,oracle.jdbc.OracleTypes.NUMBER, oracle.jdbc.OracleTypes.VARCHAR, oracle.jdbc.OracleTypes.VARCHAR,java.sql.Types.CLOB, java.sql.Types.CLOB, oracle.jdbc.OracleTypes.NUMBER, oracle.jdbc.OracleTypes.VARCHAR,oracle.jdbc.OracleTypes.TIMESTAMP };

private static ORADataFactory[] _factory = new ORADataFactory[31];

MutableStruct _struct = new MutableStruct(new Object[31], _sqlType, _factory);

позже _struct используется для установки / получения атрибутов объекта VO.

Исправление:

Это из-за oracle.jdbc.OracleTypes.TIMESTAMP где тип имеет только дату.Хотя все другие типы данных могут гибко конвертировать между Number / BigDecimal / Long, но Date и Timestamp нет.

...