1. 程式人生 > 其它 >PostgreSQL使用jdbc匯入csv檔案

PostgreSQL使用jdbc匯入csv檔案

技術標籤:Javapostgresql

在windows版的pgAdmin中,可以輕鬆的匯入資料,但是如果要在pgAdmin的介面中用命令來匯入的話就不好辦了(使用cmd copy命令除外)

這裡介紹一下如何使用JDBC的方式來匯入一個csv檔案到資料庫表

init.sql

CREATE TABLE public.test (
    id character varying NOT NULL,
    name character varying
);
INSERT INTO public.test VALUES ('1', 'Daniel');
INSERT INTO public
.test VALUES ('2', 'Lily');

input.csv

id,name
3,Jack
4,Rose

Maven依賴

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.5</version>
</dependency>

LoadCSVFile.java

package dao;

import org.postgresql.
copy.CopyManager; import org.postgresql.core.BaseConnection; import java.io.FileReader; import java.io.IOException; import java.sql.*; /** * @Author Daniel * @Description 匯入csv檔案到資料庫表 **/ public class LoadCSVFile { private Connection connection = null; public Connection getConnection() {
try { // 註冊postgresql驅動 Class.forName("org.postgresql.Driver").newInstance(); //url、使用者名稱、密碼 String url = "jdbc:postgresql://localhost:5432/test"; String username = "postgres"; String password = "123456"; connection = DriverManager.getConnection(url, username, password); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException | SQLException e) { e.printStackTrace(); } return connection; } // 執行多條SQL語句 public void executeSQL(Connection conn, String[] sqlArray) { // 直接返回Statement物件 Statement statement; try { statement = conn.createStatement(); for (String sql : sqlArray) { statement.addBatch(sql); } statement.executeBatch(); } catch (SQLException e) { e.printStackTrace(); } } public void close(Connection conn) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } public static void main(String[] args) throws SQLException, IOException { LoadCSVFile load = new LoadCSVFile(); Connection conn = load.getConnection(); // 查看錶中目前的資料,並清空表 String[] initArray = {"truncate table test"}; load.executeSQL(conn, initArray); // 這裡的核心就是使用org.postgresql.copy.CopyManager類來完成copy操作 CopyManager copyManager = new CopyManager((BaseConnection) conn); FileReader fileReader = new FileReader("C:/input.csv"); // 匯入帶有表頭的資料 long rows = copyManager.copyIn("COPY TEST FROM STDIN WITH CSV HEADER", fileReader); System.out.println("INSERT " + rows + "\n\nQuery returned successfully."); load.close(conn); } }

在這裡插入圖片描述