1. maven依赖
如果使用jdk7或者jdk6,需要使用其他对应的maven依赖,以下依赖支持jdk8及以上的版本。如果使用错jdk,在使用时会出现错误。
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.23</version>
</dependency>
2. 通过java的加载方式
-
通过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(); }
-
通过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命令。
-
通过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’。