Feedback Form

Handling NULLs, Data Types, and Type Mapping Between SQL and Java

Handling NULLs, Data Types, and Type Mapping Between SQL and Java

Handling NULLs in SQL and Java

जब हम SQL और Java के बीच data exchange करते हैं, तो सबसे बड़ा challenge होता है NULL values को सही तरीके से handle करना। NULL का मतलब होता है — “no value” या “unknown value”। अगर इसे सही तरीके से manage नहीं किया गया, तो runtime errors या गलत output मिल सकता है।

What is NULL in SQL?

SQL में NULL किसी field की “missing value” को represent करता है। इसका मतलब ये नहीं कि वो field empty है या zero है — बल्कि वहाँ कोई value exist ही नहीं करती।

Example of NULL in SQL

SELECT name, salary FROM employees WHERE commission IS NULL;

ऊपर दिए गए query से हमें सिर्फ वो records मिलेंगे जिनकी commission column में कोई value नहीं है।

Common Issues with NULL in SQL

  • NULL किसी भी comparison (जैसे =, !=) में true नहीं देता।
  • NULL values aggregation functions (जैसे SUM, AVG) को affect करती हैं।
  • Queries में गलत handling से “unexpected results” आ सकते हैं।

Handling NULL in SQL Queries

NULL को handle करने के लिए SQL में कुछ built-in functions होते हैं, जैसे:

  • IS NULL — check करता है कि value NULL है या नहीं।
  • COALESCE() — NULL value को default value से replace करता है।
  • NVL() — Oracle SQL में COALESCE जैसा function है।

Example using COALESCE()

SELECT name, COALESCE(commission, 0) AS commission FROM employees;

यह query NULL commission को 0 से replace कर देगी ताकि calculations में error न आए।

NULL Handling in Java (JDBC)

Java में जब हम SQL query run करते हैं, तो result set में NULL values को check करना ज़रूरी होता है। JDBC हमें इसके लिए कई methods देता है।

ResultSet rs = stmt.executeQuery("SELECT name, salary FROM employees"); while(rs.next()) { String name = rs.getString("name"); Double salary = rs.getDouble("salary"); if(rs.wasNull()) { salary = null; } }

यहाँ rs.wasNull() method check करता है कि पिछला value NULL था या नहीं। अगर था, तो उसे manually handle किया जाता है।

Best Practices for Handling NULLs

  • SQL query में हमेशा COALESCE() या NVL() का use करें।
  • Java में data retrieve करते समय rs.wasNull() से check करें।
  • Schema design में columns को unnecessary nullable न रखें।

Data Types in SQL and Java

जब हम SQL और Java को connect करते हैं, तो biggest factor होता है — दोनों में data types का difference। हर database (MySQL, Oracle, PostgreSQL) के अपने data types होते हैं, लेकिन Java में सब कुछ strongly typed होता है।

Common SQL Data Types

  • INT — Integer values के लिए
  • VARCHAR(n) — Variable-length string
  • CHAR(n) — Fixed-length string
  • DATE — Date values
  • DECIMAL(p, s) — Precision numeric values
  • BOOLEAN — True/False values
  • BLOB — Binary data जैसे images या files

Common Java Data Types

  • int — Whole numbers के लिए
  • String — Text values के लिए
  • double — Floating-point numbers के लिए
  • boolean — Logical true/false values
  • java.sql.Date — SQL date mapping के लिए
  • byte[] — Binary data के लिए

Key Challenge

SQL और Java में same data type नाम होने के बावजूद, internal representation अलग होती है। इसलिए सही mapping बहुत जरूरी होती है ताकि data loss या error न हो।

Type Mapping Between SQL and Java

Type mapping का मतलब होता है — SQL के data type को Java के suitable type में convert करना। JDBC API internally ये काम करता है, लेकिन हमें इसका knowledge होना चाहिए ताकि हम सही getter/setter methods use करें।

Standard SQL–Java Type Mapping Table

SQL Data Type Java Equivalent Type
CHAR, VARCHAR String
INTEGER int
SMALLINT short
BIGINT long
DECIMAL, NUMERIC java.math.BigDecimal
REAL, FLOAT float
DOUBLE double
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
BLOB byte[]
BOOLEAN boolean

Example: Mapping with PreparedStatement

PreparedStatement ps = conn.prepareStatement("INSERT INTO student (id, name, marks) VALUES (?, ?, ?)"); ps.setInt(1, 101); ps.setString(2, "Rahul"); ps.setDouble(3, 88.5); ps.executeUpdate();

यहाँ तीनों placeholders (?) के लिए Java types को SQL-compatible बनाया गया है। JDBC internally इन्हें सही SQL types में convert करता है।

Example: Retrieving Data with ResultSet

ResultSet rs = stmt.executeQuery("SELECT id, name, marks FROM student"); while(rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); double marks = rs.getDouble("marks"); }

हर SQL column का Java equivalent getter method use किया गया है।

Special Case: Date and Time Handling

SQL में DATE, TIME और TIMESTAMP तीन अलग-अलग formats होते हैं, लेकिन Java में इन्हें handle करने के लिए specific classes होती हैं।

Date sqlDate = rs.getDate("dob"); Time sqlTime = rs.getTime("login_time"); Timestamp sqlTimestamp = rs.getTimestamp("created_on");

अगर आपको इन्हें Java 8 की modern LocalDate classes में convert करना हो तो:

LocalDate localDate = sqlDate.toLocalDate(); LocalDateTime localDateTime = sqlTimestamp.toLocalDateTime();

Dealing with Numeric Precision

जब SQL में DECIMAL या NUMERIC types होते हैं, तो Java में इन्हें BigDecimal से map करना चाहिए ताकि precision loss न हो।

BigDecimal price = rs.getBigDecimal("product_price");

Dealing with BLOB and CLOB

Binary data (जैसे image, audio, pdf) के लिए SQL में BLOB और CLOB fields use की जाती हैं। Java में इन्हें byte arrays या streams से handle किया जाता है।

Blob blob = rs.getBlob("photo"); byte[] imageData = blob.getBytes(1, (int) blob.length());

Handling NULL During Type Mapping

जब SQL column NULL होता है और उसे Java में directly map करते हैं, तो NullPointerException आने का खतरा रहता है। इससे बचने के लिए हमेशा NULL check करें।

String email = rs.getString("email"); if (rs.wasNull()) { email = "Not Provided"; }

JDBC Type Conversion Mechanism

JDBC internally type conversion handle करता है, लेकिन developers को basic rules पता होने चाहिए। JDBC driver database metadata के अनुसार data को convert करता है।

Steps JDBC Follows for Type Conversion

  • Database से data fetch किया जाता है उसके native format में।
  • Driver mapping table के अनुसार उसे Java object में convert करता है।
  • अगर mismatch होता है (जैसे FLOAT को String से read करना), तो SQLException फेंकता है।

Example of Mismatch Error

int age = rs.getInt("name"); // गलत mapping

यहाँ “name” column text है, लेकिन उसे integer variable में store करने की कोशिश की गई है, जिससे error आएगा।

Best Practices for Type Mapping

  • Always verify SQL schema before writing Java code.
  • Use correct JDBC getter/setter methods.
  • For date/time, prefer java.time package (Java 8+).
  • Use wrapper classes (Integer, Double) instead of primitives when NULLs possible हैं।
  • Always handle SQLException और NullPointerException properly।

Example: Using Wrapper Classes

Integer marks = rs.getObject("marks", Integer.class);

यह approach NULL values को भी safely handle कर सकता है।

Summary of Key Points

  • NULL values को COALESCE() या rs.wasNull() से handle करें।
  • SQL और Java data types को सही map करें।
  • Date/Time mapping में java.sql और java.time दोनों का सही उपयोग करें।
  • BigDecimal से numeric precision maintain करें।
  • BLOB/CLOB data को stream या byte array के रूप में process करें।
  • Primitive types की बजाय wrapper classes prefer करें।
  • Always validate data type consistency between SQL schema and Java code।