1. 程式人生 > >java使用copy in 的方式把資料匯入postgres或greenplum

java使用copy in 的方式把資料匯入postgres或greenplum

copy in

postgres匯入資料的時候可以使用cpoy 命令進行資料匯入,如果使用java操作copy命令則需要使用postgres提供的jdbc驅動中的CopyManager來實現

  • 封裝一下
public class PGCopyInUtils {


    /**
     * 將表中的資料匯出到本地檔案
     *
     * @param connection   連線
     * @param filePath     檔案路徑
     * @param tableOrQuery 表名 或者查詢語句
     * @throws SQLException SQLException
     * @throws
IOException IOException */
public static void copyToFile(Connection connection, String filePath, String tableOrQuery) throws SQLException, IOException { FileOutputStream fileOutputStream = null; try { CopyManager copyManager = new CopyManager((BaseConnection) connection); fileOutputStream = new
FileOutputStream(filePath); String copyOut = "COPY " + tableOrQuery + " TO STDOUT DELIMITER AS ','"; final long line = copyManager.copyOut(copyOut, fileOutputStream); System.out.println(line); } finally { if (fileOutputStream != null) { try
{ fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 將檔案中的資料匯入到資料庫中 * * @param connection 連線 * @param filePath 檔案路徑 * @param tableName 表名 * @throws SQLException SQLException * @throws IOException IOException * @return long 匯入的行數 */ public static long copyFromFile(Connection connection, String filePath, String tableName) throws SQLException, IOException { FileInputStream fileInputStream = null; try { CopyManager copyManager = new CopyManager((BaseConnection) connection); fileInputStream = new FileInputStream(filePath); String copyIn = "COPY " + tableName + " FROM STDIN DELIMITER AS ','"; return copyManager.copyIn(copyIn, fileInputStream); } finally { if (fileInputStream != null) { try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
  • 使用
1. connection 資料庫連線
2. 檔案路徑
3. 表名
PGCopyInUtils.copyFromFile(connection, Constants.COPY_DEVICE_DATA_FILE_PATH, Constants.TABLE_NAME);
  • 注意
以上檔案內容的分隔符為"," 標準輸入.