Inserting Data Into Table Using JDBC PreparedStatement

在本教程中,您将学习如何使用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)

让我们运行该程序。
MySQL JDBC 插入

它表明您已成功将新候选人插入 ID 为 134 的candidates表中。

在本教程中,我们向您展示了如何使用PreparedStatement对象将新记录插入MySQL表并获取插入的ID以进行进一步处理。

本教程有帮助吗?