Java JDBC IN Clause Example with PreparedStatement MySQL


Post Banner

As you must be aware that createArrayOf() method from the Connection Interface will give you a java.sql.SQLFeatureNotSupportedException exception. One of the "not so ideal" ways to achieve the IN Clause in MySQL is to dynamically create the number of parameters as ? in your IN Clause.


import java.sql.Array;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.stream.Stream;


public class JDBCInClauseExample {
    
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        //The elements for IN Clause
        ArrayList<String> studentNames = new ArrayList<>();
        studentNames.add("Harry");
        studentNames.add("Ron");
        
        //Create an array of same size
        String[] arrayOfQuestionMarks = new String[studentNames.size()];

        //Create a array of question marks ?
        for(int i=0;i< studentNames.size();i++) {
            arrayOfQuestionMarks[i] = "?";
        }

        //Create a string of question marks ?
        String inClause = String.join(",", arrayOfQuestionMarks);
        
        String url ="jdbc:mysql://localhost:3306/my_uat";
        String userName="root";
        String password ="root123";
        String selectQuery ="Select * from students where student_name in ("+inClause+")";
        Connection connection = DriverManager.getConnection(url,userName,password);
        PreparedStatement preparedStatement = connection.prepareStatement(selectQuery);
       
        for(int i=0;i< studentNames.size();i++) {
            preparedStatement.setString(i+1, studentNames.get(i));
        }

        ResultSet resultSet = preparedStatement.executeQuery();

        while(resultSet.next()) {
            System.out.print(resultSet.getInt(1)+"\t");
            System.out.print(resultSet.getString(2)+"\t");
            System.out.print(resultSet.getString(3)+"\t");
            System.out.print(resultSet.getString(4)+"\t");
            System.out.println("");
        }
    
    }
}
Output

1 Harry 1997-01-03 00:00:00 London
2 Ron 1999-03-19 00:00:00 Paris

Facing issues? Have Questions? Post them here! I am happy to answer!

Author Info:

Rakesh (He/Him) has over 14+ years of experience in Web and Application development. He is the author of insightful How-To articles for Code2care.

Follow him on: X

You can also reach out to him via e-mail: rakesh@code2care.org

Copyright © Code2care 2024 | Privacy Policy | About Us | Contact Us | Sitemap