JDBC PreparedStatement – Вставка записи (с Maven)

Вставка записи с использованием PreparedStatement отличается тем, что значение параметров в запрос устанавливается не в момент его составления, а непосредственно перед выполнением. Вместе этого, в запрос устанавливаются маркеры, вместо которых будет установлено реальное значение. Минимально необходимый код:

String QUERY = "INSERT INTO USERS_TABLE "
    		+ "(ID, USER_NAME) VALUES "
    		+ "(?, ?)";

Connection connection = getConnection();	
PreparedStatement statement = connection.prepareStatement(QUERY);
statement.setInt(1, i);
statement.setString(2, "user_name");
statement.executeUpdate();

Полный код:

package statements;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

public class StatementsExample {
  private static final String DRIVER_NAME = "org.apache.derby.jdbc.EmbeddedDriver";
    private static final String CONNECTION_STRING = "jdbc:derby:derbyDB;create=true";
    private static final String QUERY = "INSERT INTO USERS_TABLE "
    		+ "(ID, USER_NAME) VALUES "
    		+ "(?, ?)";
  
  private void run() throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;
    try {
      connection = getConnection();	
      for (int i = 0; i < 10; i++) {
        statement = connection.prepareStatement(QUERY);
        statement.setInt(1, i);
        statement.setString(2, "USER_" + i);
        statement.executeUpdate();
        
        System.out.println("Record inserted");
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      if (statement != null) {
        statement.close();
      }
      if (connection != null) {
        connection.close();
      }
    }
  }
  
  private Connection getConnection() throws ClassNotFoundException, SQLException {
    Class.forName(DRIVER_NAME);
    Connection connection = DriverManager.getConnection(CONNECTION_STRING);
    return connection;
  }
  
  public static void main(String[] args) {
    StatementsExample app = new StatementsExample();
    try {
      app.run();
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }

}

Необходимые зависимости можно получить через Apache Maven, pom.xml приведен ниже:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>ru.mydesignstudio</groupId>
  <artifactId>statements</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.12.1.1</version>
        </dependency>
    </dependencies>
</project>