Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Presisi JOOQ Oracle Number dan pemetaan angka java

Tipe integer Java tidak cocok untuk NUMBER Oracle Oracle jenis. Pada dasarnya, ada dua cara untuk memetakan antara dunia, keduanya tidak sempurna:

  • Status quo: kurang dari NUMBER(3) -> Byte .

    Ini menjamin bahwa nilai SQL selalu dapat dibaca ke tipe Java-nya. Beberapa nilai Java mungkin tidak dapat ditulis ke tipe SQL.

  • Alternatifnya: Byte -> NUMBER(3) atau kurang.

    Ini akan menjamin bahwa Java byte nilai selalu dapat ditulis ke database. Namun, beberapa nilai DB mungkin tidak dapat dibaca ke dalam tipe Java.

jOOQ default ke yang pertama, karena asumsi berikut:

  • jOOQ sebagian besar digunakan sebagai API "database first"
  • sebagian besar data dibaca dari DB, tidak ditulis ke DB

Perilaku default

Di jOOQ 3.8.4, logika berikut diimplementasikan di 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;
}

Dengan:

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

Mengganti default

Jika dalam beberapa kasus Anda menggunakan NUMBER(3) untuk menyimpan byte angka hingga 127 misalnya, Anda dapat mengganti default ini dengan menentukan penulisan ulang tipe data selama fase pembuatan kode. Ini didokumentasikan di sini:

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. Kesalahan ORA 00904:Pengenal Tidak Valid

  2. Permintaan ditetapkan di Manajer Bersama

  3. Bagaimana Anda bisa mengetahui kolom mana yang tidak digunakan di ALL_TAB_COLS?

  4. Fungsi ABS() di Oracle

  5. Oracle:OALL8 dalam keadaan tidak konsisten