JDBC-Anweisung - Stapelaktualisierung
Ein Beispiel für eine JDBC-Anweisung zum Senden eines Stapels von SQL-Befehlen (Löschen, Erstellen, Einfügen, Aktualisieren) an die Datenbank.
BatchUpdate.java
package com.example.jdbc.statement; import java.math.BigDecimal; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; 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"); Statement statement = conn.createStatement()) { // optional, for transaction // commit all or rollback all, if any errors conn.setAutoCommit(false); // add list of SQL commands and run as a batch // drop table statement.addBatch(SQL_DROP); // create table statement.addBatch(SQL_CREATE); // insert statement.addBatch(generateInsert("example", new BigDecimal(1000))); // insert statement.addBatch(generateInsert("jane", new BigDecimal(2000))); // update statement.addBatch(updateSalaryByName("example", new BigDecimal(888))); int[] rows = statement.executeBatch(); System.out.println(Arrays.toString(rows)); // [0, 0, 1, 1, 1] // commit everything conn.commit(); // java 8, not yet implemented by pgStatement 42.2.5 // statement.executeLargeBatch(); } 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_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)" + ")"; private static final String SQL_DROP = "DROP TABLE IF EXISTS EMPLOYEE"; private static String generateInsert(String name, BigDecimal salary) { return "INSERT INTO EMPLOYEE (NAME, SALARY, CREATED_DATE) " + "VALUES ('" + name + "','" + salary + "','" + LocalDateTime.now() + "')"; } private static String updateSalaryByName(String name, BigDecimal salary) { return "UPDATE EMPLOYEE SET SALARY='" + salary + "' WHERE NAME='" + name + "'"; } }
P.S Tested with PostgreSQL 11 and Java 8
pom.xml
org.postgresql postgresql 42.2.5
Quellcode herunterladen
$ git clone https://github.com/example/java-jdbc.git