将表从Postgres数据库(在服务器上)导出到java中的csv文件(在本地)

时间:2014-06-23 15:34:59

标签: java sql postgresql csv

我想将数据库中的表导出为CSV文件     在我的本地机器上。现在,我可以连接到数据库并显示     System.out.println()控制台中的所有元素。但是我     想要在csv文件中重定向这些元素。请帮忙。

    //STEP 1. Import required packages
    import java.sql.*;

    public class ExportDataToCSV {
     // JDBC driver name and database URL
    static final String JDBC_DRIVER = "org.postgresql.Driver";  
    static final String DB_URL = "jdbc:postgresql://[localhost]:54432/database";

     //  Database credentials
    static final String USER = "login";
    static final String PASS = "pwd";

     public static void main(String[] args) {
     Connection conn = null;
     Statement stmt = null;
     try{
        //STEP 2: Register JDBC driver
    Class.forName("org.postgresql.Driver");

    //STEP 3: Open a connection
    System.out.println("Connecting to database...");
    conn = DriverManager.getConnection(DB_URL,USER,PASS);

    //STEP 4: Execute a query
    System.out.println("Creating statement...");
    stmt = conn.createStatement();
    String sql;
    sql = "SELECT id, age, first, last FROM table";
    ResultSet rs = stmt.executeQuery(sql);

    //STEP 5: Extract data from result set
    while(rs.next()){
       //Retrieve by column name
       String id  = rs.getString("id");
       String age = rs.getString("age");
       String first = rs.getString("first");
       String last = rs.getString("age");

       //Display values
       System.out.print("ID: " + id);
       System.out.print(", Age: " + age);
       System.out.print(", First: " + first);
       System.out.println(", Last: " + last);
    }

    //STEP 5: Clean-up environment
    rs.close();
    stmt.close();
    conn.close();  }catch(SQLException se){
    //Handle errors for JDBC
    se.printStackTrace();  }catch(Exception e){
    //Handle errors for Class.forName
    e.printStackTrace();  }finally{
    //finally block used to close resources
    try{
       if(stmt!=null)
          stmt.close();
    }catch(SQLException se2){
    }// nothing we can do
    try{
       if(conn!=null)
          conn.close();
    }catch(SQLException se){
       se.printStackTrace();
    }//end finally try  }//end try }//end main }//end FirstExample

2 个答案:

答案 0 :(得分:4)

使用PgJDBC的CopyManager,您可以从PGConnection获取java.sql.Connection来获取PgJDBC连接。

如果您使用连接池,则可能需要了解如何解包代理Connection以获取真正的基础PgJDBC连接对象。

CopyManager支持COPY ... TO STDOUT,允许您将服务器生成的CSV数据流式传输到客户端应用程序。

答案 1 :(得分:0)

这取决于,但您可能需要编写一个带有响应的Web页面的应用程序,该响应包含.csv文件和Content-Type响应头“text / csv”