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 MySQLJDBCUtil
que desenvolvemos no tutorial anterior .
Connection conn = MySQLJDBCUtil.getConnection();
Linguagem de código: Java ( java )
Em seguida, você constrói uma INSERT
instrução com espaços reservados e cria um novo PreparedStatement
objeto chamando o prepareStatement()
método do Connection
objeto. Você passa a instrução INSERT como o primeiro argumento e um número inteiro com valor Statement.RETURN_GENERATED_KEYS
como 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 PreparedStatement
objeto.
// 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 INSERT
instruçã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 PreparedStatement
objeto. O método retorna um ResultSet
. Você só precisa obter dados disso ResultSet
da 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 candidates
tabela 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.
Isso mostra que você inseriu com sucesso um novo candidato na candidates
tabela 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.