八月 9, 2023
摘要:在本教程中,您将学习如何使用 JDBC API 更新 PostgreSQL 数据库中的数据。
要更新 PostgreSQL 数据库表中的数据,请使用以下步骤:
- 创建数据库连接。
- 创建一个 PreparedStatement 对象。
- 通过调用
PreparedStatement
对象的executeUpdate()
方法来执行UPDATE语句。 - 关闭数据库连接。
创建数据库连接
要从 Java 程序创建 PostgreSQL 数据库连接,您需要有 PostgreSQL JDBC 驱动程序。查看如何连接到 PostgreSQL 数据库以获取详细信息。
下面的connect()
方法建立与 dvdrental 示例数据库的连接,并返回一个Connection
对象。
private String url = "jdbc:postgresql://localhost/dvdrental";
private String user = "postgres";
private String password = "postgres";
/**
* Connect to the PostgreSQL database
*
* @return a Connection object
*/
public Connection connect() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
下面的updateLastName()
方法更新actor
表中演员的姓氏。
/**
* Update actor's last name based on actor's id
*
* @param id
* @param lastName
* @return the number of affected rows
*/
public int updateLastName(int id, String lastName) {
String SQL = "UPDATE actor "
+ "SET last_name = ? "
+ "WHERE actor_id = ?";
int affectedrows = 0;
try (Connection conn = connect();
PreparedStatement pstmt = conn.prepareStatement(SQL)) {
pstmt.setString(1, lastName);
pstmt.setInt(2, id);
affectedrows = pstmt.executeUpdate();
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
return affectedrows;
}
怎么运行的。
- 首先,准备一条
UPDATE
语句来更新actor
表中演员的姓氏。 - 接下来,建立数据库连接并创建
PreparedStatement
对象。 - 然后,调用
PreparedStatement
对象的setString()
和setInt()
方法,传递演员的新姓氏和正在更新的演员的 id。 - 之后,调用
executeUpdate()
方法来执行UPDATE
语句。该方法返回受影响的行数。 - 最后,由于我们使用了 try-with-resources 语句,因此
PreparedStatement
和Connection
对象会自动关闭。
以下是完整的更新程序。
package net.rockdata.tutorial;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
*
* @author rockdata.net
*/
public class Main {
private String url = "jdbc:postgresql://localhost/dvdrental";
private String user = "postgres";
private String password = "postgres";
/**
* Connect to the PostgreSQL database
*
* @return a Connection object
*/
public Connection connect() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
/**
* Update actor's last name based on actor's id
*
* @param id
* @param lastName
* @return the number of affected rows
*/
public int updateLastName(int id, String lastName) {
String SQL = "UPDATE actor "
+ "SET last_name = ? "
+ "WHERE actor_id = ?";
int affectedrows = 0;
try (Connection conn = connect();
PreparedStatement pstmt = conn.prepareStatement(SQL)) {
pstmt.setString(1, lastName);
pstmt.setInt(2, id);
affectedrows = pstmt.executeUpdate();
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
return affectedrows;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Main main = new Main();
main.updateLastName(200, "Climo");
}
}
在运行程序之前,我们检查 id 为 200 的演员。
SELECT
*
FROM
actor
WHERE
actor_id = 200;
现在,我们运行 Java 程序将 Thora 的姓氏从 Temple 更新为 Climo。
我们再次检查指定 id 的演员。
正如您所看到的,last_name
列中的值按照我们的预期更改成了 Climo。
因为当行发生变化时,last_update
列会自动更新成修改时间,因此它的值也会发生变化。
在本教程中,我们逐步向您展示了如何使用 JDBC API 更新表中的数据。