जावा के पूर्णांक प्रकार Oracle के NUMBER
. के लिए एकदम सही मेल नहीं हैं प्रकार। अनिवार्य रूप से, दुनिया के बीच मानचित्रण करने के दो तरीके हैं, दोनों अपूर्ण:
-
यथास्थिति:
NUMBER(3)
. से बिल्कुल कम ->Byte
.यह गारंटी देता है कि SQL मान हमेशा उसके जावा प्रकार में पढ़ा जा सकता है। कुछ जावा मान SQL प्रकार के लिए लिखने योग्य नहीं हो सकते हैं।
-
विकल्प:
Byte
->NUMBER(3)
या कम।यह गारंटी देगा कि जावा
Byte
मान हमेशा डेटाबेस में लिखा जा सकता है। हालांकि, कुछ डीबी मान जावा प्रकार में पढ़ने योग्य नहीं हो सकते हैं।
निम्नलिखित धारणाओं के कारण jOOQ पहले वाले को डिफॉल्ट करता है:
- jOOQ का उपयोग अधिकतर "डेटाबेस पहले" API के रूप में किया जाता है
- अधिकांश डेटा डीबी से पढ़ा जाता है, डीबी को नहीं लिखा जाता है
डिफ़ॉल्ट व्यवहार
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 /नवीनतम/मैनुअल/कोड-जेनरेशन/डेटा-टाइप-रीराइट्स