繁体   English   中英

如何使用 JDBC 将数据从文件复制到 PostgreSQL?

[英]how to copy data from file to PostgreSQL using JDBC?

我想使用 JDBC 将数据从文件复制到 PostgreSQL DB。 我正在使用 JDBC 语句对象将文件复制到数据库中。 它非常缓慢。

我开始知道我们也可以使用 copy out 命令将文件复制到数据库。 但是,我怎么能用 JDBC 做到这一点。 即使是具有 JDBC 复制示例的良好参考材料也会有所帮助。

PS:提前致谢

这工作...

import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;

import org.postgresql.copy.CopyManager;
import org.postgresql.core.BaseConnection;

public class PgSqlJdbcCopyStreamsExample {

    public static void main(String[] args) throws Exception {

        if(args.length!=4) {
            System.out.println("Please specify database URL, user, password and file on the command line.");
            System.out.println("Like this: jdbc:postgresql://localhost:5432/test test password file");
        } else {

            System.err.println("Loading driver");
            Class.forName("org.postgresql.Driver");

            System.err.println("Connecting to " + args[0]);
            Connection con = DriverManager.getConnection(args[0],args[1],args[2]);

            System.err.println("Copying text data rows from stdin");

            CopyManager copyManager = new CopyManager((BaseConnection) con);

            FileReader fileReader = new FileReader(args[3]);
            copyManager.copyIn("COPY t FROM STDIN", fileReader );

            System.err.println("Done.");
        }
    }
}

(基于aliasmrchips回答:)如果你有一个Groovy环境(就像我在ANT 中使用它)你可以这样做(用 Postgres 替换 Oracle 的细节):

// exec.groovy
this.class.classLoader.rootLoader.addURL('${postgres-jdbc-driver-path}')
PgScript.load()

// PgScript.groovy
// (we cannot use the org.postgres.* classes in exec.groovy already!)
import java.io.FileReader
import java.sql.DriverManager
import org.postgresql.copy.CopyManager
import org.postgresql.core.BaseConnection

class PgScript {
    static void load() {        

        DriverManager.getConnection (
            '${jdbc-db-url}', '${db-usr}', '${db-usr-pass}'
        ).withCloseable {conn ->
            new CopyManager((BaseConnection) conn).
                copyIn('COPY t FROM STDIN', new FileReader('${sqlfile}'))
        }
    }
}

也基于这篇javaworld.com 文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM