Skip to main content

JDBC – PreparedStatement– How to Set Null value?


Introduction

Java Database Connection (JDBC) API allows the Java programmers to access different relational and NoSQL databases like Oracle, MySQL, SQL Server, etc. It helps to store, access and manipulate the data stored in these databases.

In this post, we will explore how to set the NULL values in PreparedStatement.

Null String data type

For String data type, it does not matter if the value to be set as a parameter in the SQL query is NULL.  

Other data types like Integer, Float, Double, Date, etc.

For data types like Integer, Float, Double, Date we have to explicitly call the setNull method.

Example


String name = null;
Long id = null;
PreparedStatement ps = connection.prepareStatement("select * from person where first_name = ? and id = ?"); 

ps.setString(1,name);

The above line will execute without throwing any exception

ps.setLong(2, id);

In the above line of code, since id is null, it will throw java.lang.NullPointerException

Solution

Check for nullability of value and call the setNull method i.e.

if( id == null ) {
ps.setNull(2, Types.INTEGER);
}else {
        ps.setLong(2, id);
}

JDBC requires that the programmer specify the proper data type for Null value using java.sql.Types.

Complete Code


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Types;

public class JDBCNullExample {

 public static void main(String[] args) throws Exception{
  Connection connection = null;
  try {   
   connection = openConnection();
   String name = null;
   Long id = null;
   
   PreparedStatement ps = connection.prepareStatement("select * from person 
                                                                            where first_name = ? and id = ?");
   ps.setString(1,name);
   
   if(id == null) {
    ps.setNull(2, Types.INTEGER);
   }else {
    ps.setLong(2, id);
   }
   ResultSet rs = ps.executeQuery(); 
   
   System.out.println(rs.getFetchSize());
   rs.close();
  }catch(Exception exception) {
   exception.printStackTrace();
  }finally {
   if(connection != null) {
    connection.close();
   }
  }  
 }
 
 private static Connection openConnection() throws Exception{  
   Class.forName("oracle.jdbc.OracleDriver");
   return DriverManager.getConnection("jdbc:oracle:thin:@IP:orcl", "user","password");   
 }
}



Conclusion


Except for the String data type, we have to explicitly specify the data type if the value is Null for other data types.

Comments

  1. This fixes the NPE (which could simply be done by using setObject in any case), but the query will still not work as expected, since NULL needs to be compared with IS instead of "=". See https://stackoverflow.com/q/9996619 for both those aspects.

    ReplyDelete

Post a Comment

Popular posts from this blog

Eclipse - Server Tomcat v8.5 Server at localhost failed to start.

When I try to launch the tomcat from Eclipse, I encountered the following error Server Tomcat v8.5 Server at localhost failed to start. Solution Step 1  Delete the .snap file located at the following location     eclipse workspace Path\ .metadata\.plugins\org.eclipse.core.resources Step 2 Delete the  tmp0  folder from the following path      eclipse workspace Path \.metadata\.plugins\org.eclipse.wst.server.core Step 3  Delete the server from servers list Step 4  Remove already added Tomcat Server      i)  Click on Define a new Server     ii)  Select Server Runtime Environments     iii) Select the Tomcat Server and remove it as follows Remove Selected Server Step 5 Make sure that correct version of Server is configured in Project Properties Step 6 Restart the Eclipse IDE.

hibernate-release-5.4.4.Final - Required Jars

Introduction Hibernate (Object Relational Mapping framework) is an implementation of Java Persistence API (JPA) specification.   Required Jars for Hibernate 5.4.4 Following Jars resided inside the required folder are the mandatory jars required for Hibernate 5.4.4 antlr-2.7.7.jar byte-buddy-1.9.11.jar classmate-1.3.4.jar dom4j-2.1.1.jar FastInfoset-1.2.15.jar hibernate-commons-annotations-5.1.0.Final.jar hibernate-core-5.4.4.Final.jar istack-commons-runtime-3.0.7.jar jandex-2.0.5.Final.jar javassist-3.24.0-GA.jar javax.activation-api-1.2.0.jar javax.persistence-api-2.2.jar jaxb-api-2.3.1.jar jaxb-runtime-2.3.1.jar jboss-logging-3.3.2.Final.jar jboss-transaction-api_1.2_spec-1.1.1.Final.jar stax-ex-1.8.jar txw2-2.3.1.jar Hibernate 5.4.4 release is compatible with  Java 8 or 11  JPA 2.2 References https://hibernate.org/orm/releases/5.4/

spark-submit java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction1$mcII$sp

Exception  Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction1$mcII$sp         at SparkPi$.main(SparkPi.scala:14)         at SparkPi.main(SparkPi.scala)         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) Problem: It seems that you have compiled and generated your jar file with an upper version of the Scala compiler than the one spark is using. Solution Step 1 Run the following command from spark-installed-directory\bin spark-shell.cmd (or.sh) and note the Scala version, My Spark version was 2.4.3 and Scala version 2.11.12 Step 2 Change the scala version into your build.sbt to 2.11.12 (per your configuration). My build.sbt is name := "SparkPi Project" version := "1.0" scalaVersion := "...