Java JDBC Postgres copyIn无法识别行尾并填充双引号

我正在尝试使用 Java 将数据从 Oracle 加载到 Greenplum。我将结果集作为逗号分隔值存储到字节数组输入流中,然后使用 copy in 加载它。


import java.sql.*; 

import au.com.bytecode.opencsv.CSVWriter;

import java.io.*;

import org.postgresql.copy.CopyManager;

import org.postgresql.core.BaseConnection;


public class ORtoGP {   

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

            try {

                String dbURL = "jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = xxxxxx)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = xxxxxx) (SRVR = DEDICATED)))";

                String strUserID = "xxxxxx";

                String strPassword = "xxxxxx";

                Connection myConnection=DriverManager.getConnection(dbURL,strUserID,strPassword);

                Statement sqlStatement = myConnection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

                String readRecordSQL = "select id,name from table where rownum <= 10 ";

                ResultSet rs = sqlStatement.executeQuery(readRecordSQL); 


                StringWriter stringWriter = new StringWriter();

                CSVWriter csvWriter = new CSVWriter(stringWriter);


                rs.first(); 

                csvWriter.writeAll(rs, true);

                String orresult = stringWriter.toString();

                System.out.println(orresult);


                byte[] bytes = orresult.getBytes();

                ByteArrayInputStream orinput = new ByteArrayInputStream(bytes); 



                String dbURL1 = "jdbc:postgresql://xxxxx:5432/xxxxx";

                String user = "xxxx";

                String pass = "xxxx";

                Connection conn2 = DriverManager.getConnection(dbURL1, user, pass);


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

                copyManager.copyIn("copy java_test from stdin with DELIMITER ','",orinput);

            }       

        }

    }

但是,我遇到了两个问题:

  1. 批量加载数据时,进程无法识别行尾。所以它给出了这个错误。“错误:最后一个预期列之后的额外数据”

  2. 它还尝试加载数据,包括值周围的双引号。


一只甜甜圈
浏览 373回答 1
1回答

海绵宝宝撒

根据文档,默认格式为text,不处理引用。您需要FORMAT csv在命令中指定。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java