Oracle
 sql >> база данни >  >> RDS >> Oracle

JOOQ Oracle Number precision и java числово картографиране

Целочислените типове на Java не съвпадат перфектно с NUMBER на Oracle видове. По същество има два начина за картографиране между световете, и двата несъвършени:

  • Статуквото: строго по-малко от NUMBER(3) -> Byte .

    Това гарантира, че дадена SQL стойност винаги може да бъде прочетена в нейния тип Java. Някои стойности на Java може да не могат да се записват в типа SQL.

  • Алтернативата: Byte -> NUMBER(3) или по-малко.

    Това ще гарантира, че Java byte стойността винаги може да бъде записана в базата данни. Някои DB стойности обаче може да не могат да бъдат прочетени в типа Java.

jOOQ по подразбиране е първият, поради следните предположения:

  • jOOQ се използва най-вече като API „първо за базата данни“
  • повечето от данните се четат от DB, а не се записват в DB

Поведението по подразбиране

В jOOQ 3.8.4 следната логика е внедрена в DefaultDataType.getNumericClass() :

// Integers
if (scale == 0 && precision != 0) {
    if (precision < BYTE_PRECISION) {
        return Byte.class;
    }
    if (precision < SHORT_PRECISION) {
        return Short.class;
    }
    if (precision < INTEGER_PRECISION) {
        return Integer.class;
    }
    if (precision < LONG_PRECISION) {
        return Long.class;
    }

    // Default integer number
    return BigInteger.class;
}

// Non-integers
else {
    return BigDecimal.class;
}

С:

int LONG_PRECISION    = String.valueOf(Long.MAX_VALUE).length();    // 19
int INTEGER_PRECISION = String.valueOf(Integer.MAX_VALUE).length(); // 10
int SHORT_PRECISION   = String.valueOf(Short.MAX_VALUE).length();   // 5
int BYTE_PRECISION    = String.valueOf(Byte.MAX_VALUE).length();    // 3

Замяна на стандартното

Ако в някои случаи използвате NUMBER(3) за съхраняване на byte числа до 127 например, можете да замените това по подразбиране, като посочите пренаписване на типа данни по време на фазата на генериране на код. Това е документирано тук:

http://www.jooq.org/doc /latest/manual/code-generation/data-type-rewrites




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pl/Sql тригер за промяна на формата на датата по подразбиране в Oracle

  2. Как да разрешите ORA-29285:грешка при запис на файл

  3. Bool поддръжка на Oracle SQL

  4. Вземете средна точка на полилиния SDO.GEOMETRY

  5. Защо има максимална дължина за имена на запомнени процедури?