PostgreSQL JDBC Batch Insert 批量插入数据示例

PostgreSQL JDBC 提供了批量插入表数据的能力,相对于一条一条地插入数据,批量插入数据的性能更高。JDBC 在内部能够将多条 insert 语句拼接成 insert into values (...),(...),(...), 的形式,一批最多拼接 128 条记录,128 是 JDBC 内部硬编码,没有相关参数能够对其进行调整。使用 JDBC 批量插入功能需要将 JDBC 改写批量插入的参数打开 reWriteBatchedInserts=true。下面通过一个示例代码展示批量插入功能。

代码示例:

import java.util.Random;
import java.sql.*;
import java.util.Properties;

public class BatchInsert{
    public static void main(String[] args)
    {
        String url = "jdbc:postgresql://127.0.0.1:36004/postgres?reWriteBatchedInserts=true";

        Properties props = new Properties();
        props.setProperty("user", "admin");
        props.setProperty("password", "123456");
        try {
                int i = 0;
                Connection conn = DriverManager.getConnection(url, props);
                conn.setAutoCommit(false);
                PreparedStatement st1 = conn.prepareStatement("insert into t(id,name) values(?,?)");
                for(i=0; i < 2000; i++){
                        st1.setInt(1,i);
                        st1.setString(2, "hello");
                        st1.addBatch();
                }
                st1.executeBatch();
                st1.close();
                conn.commit();
                conn.close();
        }catch (SQLException e) {
                e.printStackTrace();
        }
    }
}

编译执行:

javac -Djava.ext.dirs=jdbc BatchInsert.java
java -Djava.ext.dirs=jdbc BatchInsert

查询数据库,表 t 中已经写入了 2000 条数据,如下:

postgres=# select count(*) from t;
 count
-------
  2000
(1 row)

文章评论

0条评论