使用JDBC PreparedStatement将数据插入表中
时间:2019-11-20 08:52:36 来源:igfitidea点击:
在本教程中,您将学习如何使用PreparedStatement对象将数据插入MySQL表。
在上一教程中,我们向您展示了如何使用PreparedStatement对象更新数据。
调用executeUpdate()方法时,将获得受影响的行数。
当您将记录插入表中时,您可能希望将插入的ID返回给程序以进行进一步处理。
让我们看看我们如何做到这一点。
首先,像往常一样,打开与MySQL的新连接。
您可以利用我们在上一教程中开发的实用程序类MySQLJDBCUtil。
Connection conn = MySQLJDBCUtil.getConnection();
然后,使用占位符构造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);
接下来,通过调用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);
之后,您调用executeUpdate()方法以执行INSERT语句。
此方法返回受影响的行数。
我们检查返回值以查看记录是否已成功插入。
int rowAffected = pstmt.executeUpdate(); if(rowAffected == 1) { // process further here }
最后,要获取插入的ID,请调用PreparedStatement对象的getGeneratedKeys()方法。
该方法返回一个ResultSet。
您只需要从ResultSet中获取数据,如下所示:
// get candidate id int candidateId = 0; ResultSet rs = pstmt.getGeneratedKeys(); if(rs.next()) candidateId = rs.getInt(1);
以下是将数据插入候选表并将其取回的完整示例。
package org.theitroad; 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 theitroad.local */ 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)); } }
让我们运行程序。
它表明您已成功将新的候选者插入ID为134的候选者表中。
在本教程中,我们向您展示了如何使用PreparedStatement对象将新记录插入MySQL表并获取插入的ID以进行进一步处理。