【发布时间】:2018-02-17 17:18:05
【问题描述】:
我正在尝试通过 Java 从 Oracle EMP 表中提取数据(在原始表中添加了一列,数据类型为 TIMESTAMPTZ)。 当我尝试使用以下方法通过 java 查找数据类型时,它显示的结果与我预期的不同。
System.out.println(rsmd.getColumnName(index)+"-->"+rsmd.getColumnType(index)+"-->"+rsmd.getColumnClassName(index)+" ");
这是输出
EMPNO-->2-->java.math.BigDecimal
ENAME-->12-->java.lang.String
JOB-->12-->java.lang.String
MGR-->2-->java.math.BigDecimal
HIREDATE-->93-->java.sql.Timestamp
SAL-->2-->java.math.BigDecimal
COMM-->2-->java.math.BigDecimal
DEPTNO-->2-->java.math.BigDecimal
TSTMP-->-101-->oracle.sql.TIMESTAMPTZ
1) "2" 对应 java.sql.Types 中的 Numeric。 这里它显示了 EMP 表中的 NUMBER 和 NUMBER(7,2) 列,为什么显示 java.math.BigDecimal 的类我认为是小数(在这种情况下为 NUMBER(7,2))。
2) 我也没有在 java 类型中看到 TIMESTAMPTZ。 Oracle JDBC 正在处理它。 java不是支持所有的oracle DataTypes吗?
我正在将此数据写入另一个表。所以最后我决定在我的代码中使用 Object 将所有内容留给 java 进行转换。
if(obj instanceof java.math.BigDecimal)
tgtSt.setObject(index, obj);
else if(obj instanceof java.lang.String)
tgtSt.setObject(index, obj);
else if(obj instanceof java.sql.Timestamp)
tgtSt.setObject(index, obj);
else if(obj instanceof oracle.sql.TIMESTAMPTZ)
tgtSt.setObject(index, obj);
3) 这种使用对象的方法会有什么问题吗? 4) 此外,当 getObject() 和 setObject() 方法完成工作时,为什么我们还有其他方法,如 getInt() getString()..... 请帮我解决这些问题。
【问题讨论】:
-
感谢用户。但它没有回答我的问题。