我有一个应用程序使用普通的vanilla JDBC代码来访问数据库中的不同属性。这与底下的数据库无关。Oracle驱动程序与JDBC4完全兼容
但是它使用的特征中的一个需要驾驶员为符合JDBC4(特别是,它试图确定是否列自动增量访问关于该连接的元数据的getColumns的结果为IS_AUTOINCREMENT的值)
的事情是,即使使用包含在ojdbc6.jar,号称是JDBC 4标准的Oracle的oracle.jdbc.OracleDriver,它没有返回IS_AUTOINCREMENT列添加到规范的JDBC 4 。这会为未知列生成SQLException,并使应用程序对Oracle dbs不可用。
通过Oracle的驱动程序执行的SQL查询如下:
SELECT NULL作为TABLE_CAT, t.owner AS TABLE_SCHEM, t.table_name AS表名, t.column_name AS列名, DECODE( t.data_type,'CHAR',1,'VARCHAR2',12,'NUMBER',3, 'LONG',-1,'DATE',93,'RAW',-3,'LONG RAW',-4 ,
'BLOB',2004,'CLOB',2005,'BFILE',-13,'FLOAT',6, 'TIMESTAMP(6)',93,'TIMESTAMP(6)WITH TIME ZONE',-101 , 'T (2)至第二(6)',-104, 'BINARY_FLOAT',100(') , 'BINARY_DOUBLE',101, 'XMLTYPE',2007年, 1111) AS DATA_TYPE, t.data_type AS TYPE_NAME, DECODE(t.data_precision,NULL,DECODE(t.data_type, 'CHAR', 吨。 CHAR_LENGTH,
'VARCHAR',t.char_length,
'VARCHAR2',t.char_length,
'NVARCHAR2',t.char_length,
'NCHAR',t.char_length,
'NUMBER',0,t.data_length) t.data_precision) AS COLUMN_SIZE, 0 AS BUFFER_LENGTH, DECODE(t.data_type, 'NUMBER',DECODE(t.data_precision,
空,-127,
t.data_scale),
t.data_scale)AS DECIMAL_DIGITS, 10 AS NUM_PREC_RADIX, DECODE(t.nullable, 'N',0,1)为可为空, NULL AS言论, t.data_default AS COLUMN_DEF , 0 AS sql_data_type, 0 AS sql_datetime_sub, t.data_length AS char_octet_length, t.column_id AS ordinal_position, DECODE(t.nullable,'N','NO','YES')AS isulullable FROM all_tab_columns t WHERE t.owner LIKE :1 ESCAPE'/'和t.table_name LIKE :2 ESCAPE '/' 和t.column_name LIKE :3 ESCAPE '/' ORDER BY TABLE_SCHEM,TABLE_NAME ,ORDINAL_POSITION
是否有任何驱动程序/替代/解决方法呢?
SQLException是否包含任何细节? – 2010-11-23 04:58:46
该列不存在于结果集中。我添加执行的查询来说明。 – Johnco 2010-11-23 05:09:42