在本教程中,您将学习如何使用PreparedStatement对象将数据插入MySQL表。
在前面的教程中,我们向您展示了如何使用PreparedStatement对象来更新数据。当您调用executeUpdate()
方法时,您将获得受影响的行数。当您向表中插入一条记录时,您可能希望将插入的 ID 返回给程序以进行进一步处理。让我们看看如何做到这一点。
首先,与往常一样,您打开一个与 MySQL 的新连接。您可以利用我们在上一个教程中开发的实用程序类MySQLJDBCUtil
。
Connection conn = MySQLJDBCUtil.getConnection();
Code language: Java (java)
然后,使用占位符构造一条INSERT
语句,并通过调用Connection
对象的prepareStatement()
方法创建一个新的PreparedStatement
对象。您将INSERT 语句作为第一个参数传递,并将值为Statement.RETURN_GENERATED_KEYS
整数作为第二个参数传递给该方法。第二个参数指示 JDBC 返回插入的 ID。
String sql = "INSERT INTO candidates(first_name,last_name,dob,phone,email) "
+ "VALUES(?,?,?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql,
Statement.RETURN_GENERATED_KEYS);
Code language: Java (java)
接下来,通过调用PreparedStatement
对象的setYYY()
方法为占位符提供值。
// set parameters for statement
pstmt.setString(1, firstName);
pstmt.setString(2, lastName);
pstmt.setDate(3, dob);
pstmt.setString(4, phone);
pstmt.setString(5, email);
Code language: Java (java)
之后,调用executeUpdate()
方法来执行INSERT
语句。此方法返回受影响的行数。我们检查返回值以查看记录是否已成功插入。
int rowAffected = pstmt.executeUpdate();
if(rowAffected == 1)
{
// process further here
}
Code language: Java (java)
最后,要获取插入的 id,请调用PreparedStatement
对象的getGeneratedKeys()
方法。该方法返回一个ResultSet
。您只需从该ResultSet
中获取数据,如下所示:
// get candidate id
int candidateId = 0;
ResultSet rs = pstmt.getGeneratedKeys();
if(rs.next())
candidateId = rs.getInt(1);
Code language: Java (java)
下面是向candidates
表插入数据并获取插入的ID的完整示例。
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 mysqltutorial.org
*/
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"),
"bush.l@yahoo.com", "(408) 898-6666");
System.out.println(String.format("A new candidate with id %d has been inserted.",id));
}
}
Code language: Java (java)
让我们运行该程序。
它表明您已成功将新候选人插入 ID 为 134 的candidates
表中。
在本教程中,我们向您展示了如何使用PreparedStatement对象将新记录插入MySQL表并获取插入的ID以进行进一步处理。