PostgreSQL Java 教程: 更新 PostgreSQL 数据库中的数据

八月 9, 2023

摘要:在本教程中,您将学习如何使用 JDBC API 更新 PostgreSQL 数据库中的数据。

要更新 PostgreSQL 数据库表中的数据,请使用以下步骤:

  1. 创建数据库连接。
  2. 创建一个 PreparedStatement 对象。
  3. 通过调用PreparedStatement对象的executeUpdate()方法来执行UPDATE语句
  4. 关闭数据库连接。

创建数据库连接

要从 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 语句,因此PreparedStatementConnection对象会自动关闭。

以下是完整的更新程序。

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;

PostgreSQL JDBC Update Example

现在,我们运行 Java 程序将 Thora 的姓氏从 Temple 更新为 Climo。

postgresql jdbc update

我们再次检查指定 id 的演员。

PostgreSQL JDBC Update data

正如您所看到的,last_name列中的值按照我们的预期更改成了 Climo。

因为当行发生变化时,last_update列会自动更新成修改时间,因此它的值也会发生变化。

在本教程中,我们逐步向您展示了如何使用 JDBC API 更新表中的数据。