Inserindo dados na tabela usando JDBC PreparedStatement

Neste tutorial, você aprenderá como usar o objeto PreparedStatement para inserir dados na tabela MySQL.

No tutorial anterior, mostramos como usar o objeto PreparedStatement para atualizar dados . Ao chamar o executeUpdate()método, você obtém o número de linhas afetadas. Ao inserir um registro em uma tabela, você pode querer devolver o ID inserido ao programa para processamento posterior. Vamos ver como podemos fazer isso.

Primeiro, como sempre, você abre uma nova conexão com o MySQL . Você pode utilizar a classe utilitária MySQLJDBCUtilque desenvolvemos no tutorial anterior .

Connection conn = MySQLJDBCUtil.getConnection();Linguagem de código:  Java  ( java )

Em seguida, você constrói uma INSERTinstrução com espaços reservados e cria um novo PreparedStatementobjeto chamando o prepareStatement()método do Connectionobjeto. Você passa a instrução INSERT como o primeiro argumento e um número inteiro com valor  Statement.RETURN_GENERATED_KEYScomo o segundo argumento para o método. O segundo argumento instrui o JDBC a devolver o ID inserido.

String sql = "INSERT INTO candidates(first_name,last_name,dob,phone,email) "
            + "VALUES(?,?,?,?,?)";

PreparedStatement pstmt = conn.prepareStatement(sql,
                              Statement.RETURN_GENERATED_KEYS);

Linguagem de código:  Java  ( java )

A seguir, você fornece valores para espaços reservados chamando setYYY()o método do PreparedStatementobjeto.

// set parameters for statement
pstmt.setString(1, firstName);
pstmt.setString(2, lastName);
pstmt.setDate(3, dob);
pstmt.setString(4, phone);
pstmt.setString(5, email);
Linguagem de código:  Java  ( java )

Depois disso, você chama o executeUpdate()método para executar a INSERTinstrução. Este método retorna o número de linhas afetadas. Verificamos o valor de retorno para ver se o registro foi inserido com sucesso.

int rowAffected = pstmt.executeUpdate();
if(rowAffected == 1)
{
   // process further here
}Linguagem de código:  Java  ( java )

Finalmente, para obter o id inserido, você chama o getGeneratedKeys()método do PreparedStatementobjeto. O método retorna um ResultSet. Você só precisa obter dados disso ResultSetda seguinte maneira:

// get candidate id
int candidateId = 0;
ResultSet rs = pstmt.getGeneratedKeys();
if(rs.next())
   candidateId = rs.getInt(1);Linguagem de código:  Java  ( java )

A seguir está o exemplo completo de inserção de dados na candidatestabela e recuperação do ID inserido.

package org.mysqltutorial;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *
 * @author tutorials.acervolima.com
 */
public class Main {

    /**
     * Insert a new candidate
     * @param firstName
     * @param lastName
     * @param dob
     * @param email
     * @param phone
     * @return 
     */
    public static int insertCandidate(String firstName,String lastName,Date dob, 
                                       String email, String phone) {
        // for insert a new candidate
        ResultSet rs = null;
        int candidateId = 0;
        
        String sql = "INSERT INTO candidates(first_name,last_name,dob,phone,email) "
                   + "VALUES(?,?,?,?,?)";
        
        try (Connection conn = MySQLJDBCUtil.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);) {
            
            // set parameters for statement
            pstmt.setString(1, firstName);
            pstmt.setString(2, lastName);
            pstmt.setDate(3, dob);
            pstmt.setString(4, phone);
            pstmt.setString(5, email);

            int rowAffected = pstmt.executeUpdate();
            if(rowAffected == 1)
            {
                // get candidate id
                rs = pstmt.getGeneratedKeys();
                if(rs.next())
                    candidateId = rs.getInt(1);

            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } finally {
            try {
                if(rs != null)  rs.close();
            } catch (SQLException e) {
                System.out.println(e.getMessage());
            }
        }
        
        return candidateId;
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
         // insert a new candidate
         int id = insertCandidate("Bush", "Lily", Date.valueOf("1980-01-04"), 
                        "[email protected]", "(408) 898-6666");
         
         System.out.println(String.format("A new candidate with id %d has been inserted.",id));
    }
}Linguagem de código:  Java  ( java )

Vamos executar o programa.
Inserção MySQL JDBC

Isso mostra que você inseriu com sucesso um novo candidato na candidatestabela com o id 134.

Neste tutorial, mostramos como usar o objeto PreparedStatement para inserir um novo registro em uma tabela MySQL e obter o ID inserido de volta para processamento posterior.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *