sql >> Databáze >  >> RDS >> Oracle

JOOQ Oracle Přesnost čísel a java mapování čísel

Celočíselné typy Java se dokonale neshodují s NUMBER Oracle typy. V podstatě existují dva způsoby mapování mezi světy, oba jsou nedokonalé:

  • Současný stav: striktně menší než NUMBER(3) -> Byte .

    To zaručuje, že hodnotu SQL lze vždy číst do jejího typu Java. Některé hodnoty Java nemusí být zapisovatelné do typu SQL.

  • Alternativa: Byte -> NUMBER(3) nebo méně.

    To zaručí, že byte Java hodnotu lze vždy zapsat do databáze. Některé hodnoty DB však nemusí být čitelné do typu Java.

jOOQ se nastaví na první z následujících předpokladů:

  • jOOQ se většinou používá jako „database first“ API
  • většina dat je čtena z DB, nikoli zapisována do DB

Výchozí chování

V jOOQ 3.8.4 je následující logika implementována v 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;
}

S:

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

Přepsání výchozího nastavení

Pokud v některých případech použijete NUMBER(3) pro uložení byte čísla do 127 toto výchozí nastavení můžete například přepsat zadáním přepisování datového typu během fáze generování kódu. Toto je zdokumentováno zde:

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




  1. Vložení obrázku do BLOB Oracle 10g

  2. Jeden k mnoha vztahům v MyBatis

  3. PDO bindParam neumožňuje příkazu vrátit výsledky

  4. Chyba připojení Java Oracle localhost (ORA-12505)