使用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以进行进一步处理。

