Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

JOOQ Oracle Number chính xác và ánh xạ số java

Các kiểu số nguyên của Java không phải là đối sánh hoàn hảo với NUMBER của Oracle các loại. Về cơ bản, có hai cách để lập bản đồ giữa các thế giới, cả hai đều không hoàn hảo:

  • Hiện trạng: nhỏ hơn NUMBER(3) -> Byte .

    Điều này đảm bảo rằng một giá trị SQL luôn có thể được đọc cho kiểu Java của nó. Một số giá trị Java có thể không ghi được vào kiểu SQL.

  • Giải pháp thay thế: Byte -> NUMBER(3) hoặc ít hơn.

    Điều này sẽ đảm bảo rằng một Java byte giá trị luôn có thể được ghi vào cơ sở dữ liệu. Tuy nhiên, một số giá trị DB có thể không đọc được trong kiểu Java.

jOOQ mặc định là cái đầu tiên, vì các giả định sau:

  • jOOQ chủ yếu được sử dụng làm API "đầu tiên cho cơ sở dữ liệu"
  • hầu hết dữ liệu được đọc từ DB, không được ghi vào DB

Hành vi mặc định

Trong jOOQ 3.8.4, logic sau được triển khai trong 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;
}

Với:

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

Ghi đè giá trị mặc định

Nếu trong một số trường hợp, bạn sử dụng NUMBER(3) để lưu trữ byte số lên đến 127 chẳng hạn, bạn có thể ghi đè mặc định này bằng cách chỉ định ghi lại kiểu dữ liệu trong giai đoạn tạo mã. Điều này được ghi lại ở đây:

http://www.jooq.org/doc / mới nhất / thủ công / tạo mã / dữ liệu-loại-viết lại




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng bí danh trong khi một phần của một câu lệnh tình huống trong Oracle SQL

  2. ORA-27154 / ORA-27146

  3. Kiểm tra xem hàng có tồn tại không

  4. Định cấu hình mybatis để sử dụng kết nối hiện có

  5. Trong SQL * Plus, làm cách nào để thay đổi lời nhắc hiển thị người dùng và cơ sở dữ liệu được kết nối?