A JDBC Подготовленный оператор
пример отправки пакета SQL-команд (создать, вставить, обновить) в базу данных.
package com.mkyong.jdbc.preparestatement; import java.math.BigDecimal; import java.sql.*; import java.time.LocalDateTime; import java.util.Arrays; public class BatchUpdate { public static void main(String[] args) { try (Connection conn = DriverManager.getConnection( "jdbc:postgresql://127.0.0.1:5432/test", "postgres", "password"); PreparedStatement psDDL = conn.prepareStatement(SQL_CREATE); PreparedStatement psInsert = conn.prepareStatement(SQL_INSERT); PreparedStatement psUpdate = conn.prepareStatement(SQL_UPDATE)) { // commit all or rollback all, if any errors conn.setAutoCommit(false); // default true psDDL.execute(); // Run list of insert commands psInsert.setString(1, "mkyong"); psInsert.setBigDecimal(2, new BigDecimal(10)); psInsert.setTimestamp(3, Timestamp.valueOf(LocalDateTime.now())); psInsert.addBatch(); psInsert.setString(1, "kungfu"); psInsert.setBigDecimal(2, new BigDecimal(20)); psInsert.setTimestamp(3, Timestamp.valueOf(LocalDateTime.now())); psInsert.addBatch(); psInsert.setString(1, "james"); psInsert.setBigDecimal(2, new BigDecimal(30)); psInsert.setTimestamp(3, Timestamp.valueOf(LocalDateTime.now())); psInsert.addBatch(); int[] rows = psInsert.executeBatch(); System.out.println(Arrays.toString(rows)); // Run list of update commands psUpdate.setBigDecimal(1, new BigDecimal(999.99)); psUpdate.setString(2, "mkyong"); psUpdate.addBatch(); psUpdate.setBigDecimal(1, new BigDecimal(888.88)); psUpdate.setString(2, "james"); psUpdate.addBatch(); int[] rows2 = psUpdate.executeBatch(); System.out.println(Arrays.toString(rows2)); conn.commit(); } catch (SQLException e) { System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage()); } catch (Exception e) { e.printStackTrace(); } } private static final String SQL_INSERT = "INSERT INTO EMPLOYEE (NAME, SALARY, CREATED_DATE) VALUES (?,?,?)"; private static final String SQL_UPDATE = "UPDATE EMPLOYEE SET SALARY=? WHERE NAME=?"; private static final String SQL_CREATE = "CREATE TABLE EMPLOYEE" + "(" + " ID serial," + " NAME varchar(100) NOT NULL," + " SALARY numeric(15, 2) NOT NULL," + " CREATED_DATE timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP," + " PRIMARY KEY (ID)" + ")"; }
В этом примере пакета используются транзакции, либо фиксирующие все, либо откатывающие все, если возникают ошибки.
conn.setAutoCommit(false); // SQL conn.commit();
P.S Протестировано с PostgreSQL 11 и Java 8
org.postgresql postgresql 42.2.5
Скачать Исходный Код
Рекомендации
- Инструкция JDBC – Пакетное обновление
- Подготовленные документы JavaDocs
- Учебные пособия по Java JDBC
- PostgreSQL – сервер – вставлять
Оригинал: “https://mkyong.com/jdbc/jdbc-preparedstatement-example-batch-update/”