云数据库 GaussDB-示例:通过本地文件导入导出数据

时间:2025-02-12 15:09:14

示例:通过本地文件导入导出数据

在使用JAVA语言基于 GaussDB 进行二次开发时,可以使用CopyManager接口,通过流方式,将数据库中的数据导出到本地文件或者将本地文件导入数据库中,文件格式支持 CS V、TEXT等格式。

样例程序如下,执行时需要加载GaussDB jdbc驱动,驱动的获取和加载方法请参考JDBC包、驱动类和环境类

前置条件:在数据库中创建表migration_table和migration_table_1,并在migration_table表中插入一些数据。

  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99100101102103104105106107108109
//以下用例以gsjdbc4.jar为例。// 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。// 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。// $ip、$port、database需要用户自行修改。import java.sql.Connection; import java.sql.DriverManager; import java.io.IOException;import java.io.FileInputStream;import java.io.FileOutputStream;import java.sql.SQLException; import org.postgresql.copy.CopyManager; import org.postgresql.core.BaseConnection; public class Copy{      public static void main(String[] args)      {       String urls = new String("jdbc:postgresql://$ip:$port/database"); //数据库URL       String username = System.getenv("EXAMPLE_USERNAME_ENV");            //用户名       String password = System.getenv("EXAMPLE_PASSWORD_ENV");             //密码       String tablename = new String("migration_table"); //定义表信息       String tablename1 = new String("migration_table_1"); //定义表信息       String driver = "org.postgresql.Driver";       Connection conn = null;             try {             Class.forName(driver);             conn = DriverManager.getConnection(urls, username, password);                   } catch (ClassNotFoundException e) {                e.printStackTrace(System.out);           } catch (SQLException e) {                e.printStackTrace(System.out);           }             // 将SELECT * FROM migration_table查询结果导出到本地文件d:/data.txt        try {     copyToFile(conn, "d:/data.txt", "(SELECT * FROM migration_table)");   } catch (SQLException e) {    e.printStackTrace();   } catch (IOException e) {   e.printStackTrace();   }          //将d:/data.txt中的数据导入到migration_table_1中。      try {      copyFromFile(conn, "d:/data.txt", tablename1);   } catch (SQLException e) {         e.printStackTrace(); } catch (IOException e) {    e.printStackTrace(); }        // 将migration_table_1中的数据导出到本地文件d:/data1.txt        try {      copyToFile(conn, "d:/data1.txt", tablename1);   } catch (SQLException e) {    e.printStackTrace();   } catch (IOException e) {    e.printStackTrace(); }             }   // 使用copyIn把数据从文件中导入数据库,  public static void copyFromFile(Connection connection, String filePath, String tableName)            throws SQLException, IOException {              FileInputStream fileInputStream = null;          try {           CopyManager copyManager = new CopyManager((BaseConnection)connection);           fileInputStream = new FileInputStream(filePath);           copyManager.copyIn("COPY " + tableName + " FROM STDIN", fileInputStream);       } finally {           if (fileInputStream != null) {               try {                   fileInputStream.close();               } catch (IOException e) {                   e.printStackTrace();               }           }       }   }      // 使用copyOut把数据从数据库中导出到文件中  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);            copyManager.copyOut("COPY " + tableOrQuery + " TO STDOUT", fileOutputStream);        } finally {            if (fileOutputStream != null) {                try {                    fileOutputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }  }
support.huaweicloud.com/distributed-devg-v2-gaussdb/gaussdb-12-0068.html