一个JDBC语句示例,用于向数据库发送一批SQL命令(删除,创建,插入,更新)。
BatchUpdate.java
package com.mkyong.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("mkyong", new BigDecimal(1000)));
// insert
statement.addBatch(generateInsert("jane", new BigDecimal(2000)));
// update
statement.addBatch(updateSalaryByName("mkyong", 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 + "'";
}
}
PS已通过PostgreSQL 11和Java 8测试
pom.xml
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.5</version>
</dependency>
下载源代码
$ git clone https://github.com/mkyong/java-jdbc.git
参考文献
翻译自: https://mkyong.com/jdbc/jdbc-statement-example-batch-update/