PostgreSQL Java 教程: 将数据插入表中

八月 9, 2023

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

我们将使用示例数据库中的actor表进行演示。

向表中插入一行

要将行插入表中,请按照下列步骤操作:

  1. 建立数据库连接,获取 Connection 对象。
  2. 从 Connection 对象创建 Statement 对象。
  3. 执行 INSERT 语句。
  4. 关闭数据库连接。

要连接到 PostgreSQL 数据库服务器,您必须提供指定数据库服务器位置以及数据库名称的连接字符串。此外,您需要提供用户名和密码以向数据库服务器进行身份验证。

以下connect()方法创建数据库连接,并返回一个Connection对象。

    private final String url = "jdbc:postgresql://localhost/dvdrental";
    private final String user = "postgres";
    private final String password = "postgres";

    /**
     * Connect to the PostgreSQL database
     *
     * @return a Connection object
     */
    public Connection connect() throws SQLException {
        return DriverManager.getConnection(url, user, password);
    }

查看如何连接 PostgreSQL 数据库服务器以获取详细信息。

当我们向具有自动生成 id 的表中插入一行时,我们通常希望取回 id 值以进行进一步处理。

要获取自动生成的 id,您必须:

  • 创建 Statement 对象时,将Statement.RETURN_GENERATED_KEYS传递给prepareStatement()方法。
  • 调用 Statement 对象的getGeneratedKeys()方法获取 id 值。

下面的insertActor()方法向actor表中插入一行。

public long insertActor(Actor actor) {
        String SQL = "INSERT INTO actor(first_name,last_name) "
                + "VALUES(?,?)";

        long id = 0;

        try (Connection conn = connect();
                PreparedStatement pstmt = conn.prepareStatement(SQL,
                Statement.RETURN_GENERATED_KEYS)) {

            pstmt.setString(1, actor.getFirstName());
            pstmt.setString(2, actor.getLastName());

            int affectedRows = pstmt.executeUpdate();
            // check the affected rows 
            if (affectedRows > 0) {
                // get the ID back
                try (ResultSet rs = pstmt.getGeneratedKeys()) {
                    if (rs.next()) {
                        id = rs.getLong(1);
                    }
                } catch (SQLException ex) {
                    System.out.println(ex.getMessage());
                }
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return id;
    }

Actor 类如下:

package net.rockdata.tutorial;

/**
 *
 * @author rockdata.net
 */
public class Actor {

    private String firstName;
    private String lastName;

    public Actor(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;

    }

    public Actor() {
    }

    /**
     * @return the firstName
     */
    public String getFirstName() {
        return firstName;
    }

    /**
     * @param firstName the firstName to set
     */
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    /**
     * @return the lastName
     */
    public String getLastName() {
        return lastName;
    }

    /**
     * @param lastName the lastName to set
     */
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

postgresql jdbc insert

向表中插入多行

向表中插入多行的步骤如下:

  1. 创建数据库连接。
  2. 创建一个PreparedStatement对象。
  3. 调用PreparedStatement对象的addBatch()方法。
  4. 调用executeBatch()方法将一批INSERT语句提交给 PostgreSQL 数据库服务器执行。
  5. 关闭数据库连接。

由于发送到 PostgreSQL 的 SQL 语句的长度是有限的,因此,您应该针对一定数量或更少的行(例如每 100 行)调用executeBatch()

下面的insertActors()方法将演员列表插入到actor表中。

    /**
     * insert multiple actors
     */
    public void insertActors(List<Actor> list) {
        String SQL = "INSERT INTO actor(first_name,last_name) "
                + "VALUES(?,?)";
        try (
                Connection conn = connect();
                PreparedStatement statement = conn.prepareStatement(SQL);) {
            int count = 0;

            for (Actor actor : list) {
                statement.setString(1, actor.getFirstName());
                statement.setString(2, actor.getLastName());

                statement.addBatch();
                count++;
                // execute every 100 rows or less
                if (count % 100 == 0 || count == list.size()) {
                    statement.executeBatch();
                }
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
    }

postgresql jdbc insert batch

在本教程中,您学习了如何使用 JDBC API 将一行或多行插入到 PostgreSQL 数据库中。