PreparedStatement with Parameters

This section describes how to create PreparedStatement objects with Parameters.

To make a PreparedStatement object more flexible, you can add parameters to the embedded SQL statement with question marks (?). Real values should be added before executing the PreparedStatement object.

Adding values to PreparedStatement parameters should be done by calling setXXX() methods in this format:

ps.setXXX(1, value);
ps.setXXX(2, value);
...
ps.setXXX(n, value);
  // Sets value to the n-th parameter.

JDBC supports many setXXX() methods, one for each Java data type, so that you can set parameter values directly with the desired Java data types without any conversion. Here is a list of setXXX() methods:

Here is a sample program that created a PreparedStatement object with one parameter:

/* MySqlPreparedStatementParameter.java
 * Copyright (c) HerongYang.com. All Rights Reserved.
 */
import java.util.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
public class MySqlPreparedStatementParameter {
  public static void main(String [] args) {
    Connection con = null;
    try {
      com.mysql.cj.jdbc.MysqlDataSource ds
        = new com.mysql.cj.jdbc.MysqlDataSource();
      // com.mysql.jdbc.jdbc2.optional.MysqlDataSource ds
      //   = new com.mysql.jdbc.jdbc2.optional.MysqlDataSource();
      ds.setServerName("localhost");
      ds.setPortNumber(3306);
      ds.setDatabaseName("HerongDB");
      ds.setUser("Herong");
      ds.setPassword("TopSecret");
      ds.setServerTimezone(java.util.TimeZone.getDefault().getID());
      con = ds.getConnection();

// PreparedStatement for SELECT statement with one parameter
      PreparedStatement sta = con.prepareStatement(
        "SELECT * FROM Profile WHERE ID = ?");

// Provide a value to the parameter
      int id = 9;
      sta.setInt(1,id);

// Execute the PreparedStatement as a query
      ResultSet res = sta.executeQuery();

// Get values out of the ResultSet
      res.next();
      String firstName = res.getString("FirstName");
      String lastName = res.getString("LastName");
      System.out.println("User ID "+id+": "+firstName+' '+lastName);

// Close ResultSet and PreparedStatement
      res.close();
      sta.close();

      con.close();
    } catch (Exception e) {
      System.err.println("Exception: "+e.getMessage());
      e.printStackTrace();
    }
  }
}

Output of the program confirms that the PreparedStatement object worked correctly:

User ID 9: 16a8 dabd2

Table of Contents

 About This Book

 JDBC (Java Database Connectivity) Introduction

 JDK (Java SE) Installation

 MySQL Installation on Windows

 MySQL JDBC Driver (MySQL Connector/J)

MySQL - PreparedStatement

 PreparedStatement Overview

PreparedStatement with Parameters

 PreparedStatement in Batch Mode

 Performance of Inserting Rows with a PreparedStatement

 InnoDB (MySQL 5.5 Default Engine) Slower on INSERT

 Performance of Inserting Rows with a Regular Statement

 Performance of Inserting Rows with a ResultSet

 MySQL - Reference Implementation of JdbcRowSet

 MySQL - JBDC CallableStatement

 MySQL CLOB (Character Large Object) - TEXT

 MySQL BLOB (Binary Large Object) - BLOB

 Using Connection Pool with JDBC

 Archived Tutorials

 References

 Full Version in PDF/EPUB