zoukankan      html  css  js  c++  java
  • 程序兼容mysql和oracle程序中尽量避免类型强制转换

    异常信息

    确认一下建表语句中字段类型是NUMBER, 对应java中的类型是Bigdecimal 以下代码抛类型转换异常

    BigInteger obj = (BigInteger) countQuery.getSingleResult();
    long total = obj.longValue();

    修改为

    String scount = countQuery.getSingleResult().toString();
    Long total = Long.valueOf(scount);

    感谢

    地址:

    http://otndnld.Oracle.co.jp/document/products/oracle10g/102/doc_cd/Java.102/B19275-03/datacc.htm#BHCJBJCC

    SQL数据类型JDBC类型代码标准的Java类型Oracle扩展的Java类型
     

    1.0标准的JDBC类型:

       

    CHAR

    java.sql.Types.CHAR

    java.lang.String

    oracle.sql.CHAR

    VARCHAR2

    java.sql.Types.VARCHAR

    java.lang.String

    oracle.sql.CHAR

    LONG

    java.sql.Types.LONGVARCHAR

    java.lang.String

    oracle.sql.CHAR

    NUMBER

    java.sql.Types.NUMERIC

    java.math.BigDecimal

    oracle.sql.NUMBER

    NUMBER

    java.sql.Types.DECIMAL

    java.math.BigDecimal

    oracle.sql.NUMBER

    NUMBER

    java.sql.Types.BIT

    boolean

    oracle.sql.NUMBER

    NUMBER

    java.sql.Types.TINYINT

    byte

    oracle.sql.NUMBER

    NUMBER

    java.sql.Types.SMALLINT

    short

    oracle.sql.NUMBER

    NUMBER

    java.sql.Types.INTEGER

    int

    oracle.sql.NUMBER

    NUMBER

    java.sql.Types.BIGINT

    long

    oracle.sql.NUMBER

    NUMBER

    java.sql.Types.REAL

    float

    oracle.sql.NUMBER

    NUMBER

    java.sql.Types.FLOAT

    double

    oracle.sql.NUMBER

    NUMBER

    java.sql.Types.DOUBLE

    double

    oracle.sql.NUMBER

    RAW

    java.sql.Types.BINARY

    byte[]

    oracle.sql.RAW

    RAW

    java.sql.Types.VARBINARY

    byte[]

    oracle.sql.RAW

    LONGRAW

    java.sql.Types.LONGVARBINARY

    byte[]

    oracle.sql.RAW

    DATE

    java.sql.Types.DATE

    java.sql.Date

    oracle.sql.DATE

    DATE

    java.sql.Types.TIME

    java.sql.Time

    oracle.sql.DATE

    TIMESTAMP

    java.sql.Types.TIMESTAMP

    javal.sql.Timestamp

    oracle.sql.TIMESTAMP

     

    2.0标准的JDBC类型:

       

    BLOB

    java.sql.Types.BLOB

    java.sql.Blob

    oracle.sql.BLOB

    CLOB

    java.sql.Types.CLOB

    java.sql.Clob

    oracle.sql.CLOB

    用户定义的对象

    java.sql.Types.STRUCT

    java.sql.Struct

    oracle.sql.STRUCT

    用户定义的参考

    java.sql.Types.REF

    java.sql.Ref

    oracle.sql.REF

    用户定义的集合

    java.sql.Types.ARRAY

    java.sql.Array

    oracle.sql.ARRAY

     

    Oracle扩展:

       

    BFILE

    oracle.jdbc.OracleTypes.BFILE

    N/A

    oracle.sql.BFILE

    ROWID

    oracle.jdbc.OracleTypes.ROWID

    N/A

    oracle.sql.ROWID

    REF CURSOR

    oracle.jdbc.OracleTypes.CURSOR

    java.sql.ResultSet

    oracle.jdbc.OracleResultSet

    TIMESTAMP

    oracle.jdbc.OracleTypes.TIMESTAMP

    java.sql.Timestamp

    oracle.sql.TIMESTAMP

    TIMESTAMP WITH TIME ZONE

    oracle.jdbc.OracleTypes.TIMESTAMPTZ

    java.sql.Timestamp

    oracle.sql.TIMESTAMPTZ

    TIMESTAMP WITH LOCAL TIME ZONE

    oracle.jdbc.OracleTypes.TIMESTAMPLTZ

    java.sql.Timestamp

    oracle.sql.TIMESTAMPLTZ

     
     
    http://blog.csdn.net/perny/article/details/7971003
     

    数据库中为number类型的字段,在Java类型中对应的有Integer和BigDecimal都会出现; 
    测试发现当数据库为sql server和DB2时,用getObject()取出来时Integer类型,但是Oracle 中取出来就会是Integer或者BigDecimal类型。原因是oracle与java类型对应于number长度有关。 
    这里写图片描述

    遇到该类型问题,若要判断每个数据库和数据库字段长度不同对应的java数据类型不同太过烦琐,可采用getString()来取值,统一先转为string来判断

    另外附上 
    java.sql.Types,数据库字段类型,java数据类型的对应关系 
    http://www.cnblogs.com/shishm/archive/2012/01/30/2332142.html

  • 相关阅读:
    Tabindex
    bootStrap下拉菜单 点击下拉列表某个元素,列表不隐藏
    ionic--分模块
    ionic--配置路由
    ionic —指令
    一个简单的Makefile的编写【用自己的话,解释清楚这些】
    使用ptrace向已运行进程中注入.so并执行相关函数
    StrictMode模式介绍
    adb server is out of date. killing...
    交叉编译lsof for android
  • 原文地址:https://www.cnblogs.com/yadongliang/p/13435423.html
Copyright © 2011-2022 走看看