Postgresql使用java JDBC导入数据的方法

1. maven依赖

如果使用jdk7或者jdk6,需要使用其他对应的maven依赖,以下依赖支持jdk8及以上的版本。如果使用错jdk,在使用时会出现错误。

        <dependency>
            <groupId>org.postgresqlgroupId>
            <artifactId>postgresqlartifactId>
            <version>42.2.23version>
        dependency>
2. 通过java的加载方式
  1. 通过jdbc执行insert语句不断导入数据。

    通过jdbc执行insert语句这种方式是最普通,适用于各种数据库不仅仅是postgresql,但是这种方式在数据量大的情况下,插入效率低。以下只是简单的例子,执行语句的方法。

    public static void main(String[] args) {
        Class.forName("org.postgresql.Driver");
        String url = "jdbc:postgresql://localhost:port/dbname?user=***e&password=***";
        Connection connection = DriverManager.getConnection(url);
        Statement statement = connection.createStatement();
        // PreparedStatement preparedStatement = connection.prepareStatement(); 也可以使用PreparedStatement
        statement.execute(sql);
        statement.close();
        connection.close();
    }
    
  2. 通过postgresql的客户端psql执行copy命令。

    此方式需要在运行主机安装psql。win10下不想安装服务端,可以在安装包里选择只安装Command Line Tools。安装后,在相应的目录里有psql的指令。linux下可以通过命令只安装客户端,具体方法百度可以搜到的。可以参考:https://blog.csdn.net/liumiaocn/article/details/108314207

    此方式是通过Runtime类,执行psql的copy命令,导入数据到postgresql

    public static void main(String[] args) {
        Runtime.getRuntime().exec("psql -c \"\\copy postgresdb.test2 from 'D:\\testdata.txt' WITH DELIMITER ',' NULL AS ''\"  postgresql://username:password@localhost:5000/dbname?sslmode=prefer");
    }
    

    此方法中使用的copy相关命令,参考官网psql命令。

  3. 通过jdbc的CopyManager执行copy命令。

    由于通过jdbc直接执行copy是不行的。如果不想安装客户端,而直接在主机通过jdbc执行copy命令,需要用到CopyManager。

    public static void main(String[] args) {
        Class.forName("org.postgresql.Driver");
        String url = "jdbc:postgresql://localhost:port/dbname?user=***e&password=***";
        Connection connection = DriverManager.getConnection(url);
        CopyManager copyManager = new CopyManager((BaseConnection) connection);
        FileInputStream fileInputStream = new FileInputStream("D:\\testdata.txt");
        long succesNum = copyManager.copyIn("copy postgresdb.testh(id,time) from stdin WITH DELIMITER ',' NULL AS ''", fileInputStream);
    }
    
3. 16进制分隔符处理

​ 16进制分隔符需要使用E’’来处理,比如0x01作为分隔符,要写成delimeter E’\x01’。

你可能感兴趣的:(数据库,后端,postgresql,java,linux,jdbc)