1

Following is Java Code to get data from DB using JDBC. However, I want column names also but it's appending data only. I am not sure how to achieve this.

import java.io.FileReader;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.sql.ResultSet;
import java.util.Properties;
public class DbToCSV {


    public static void main(String[] args) {


        try {

            FileReader reader=new FileReader("some.properties");  
            Properties properties=new Properties();  
            properties.load(reader);  
            String filename =properties.getProperty("filepath");
            FileWriter filewrite = new FileWriter(filename);
            Class.forName(properties.getProperty("jdbc.driver")).newInstance();
            Connection connection = DriverManager.getConnection
                    (properties.getProperty("jdbc.url"),
                    properties.getProperty("jdbc.username"),
                    properties.getProperty("jdbc.password"));

            String query = properties.getProperty("jdbc.query");

            Statement stmt = connection.createStatement();
            ResultSet resultSet = stmt.executeQuery(query);
            ResultSetMetaData rsmd = resultSet.getMetaData();
            int columnCount = rsmd.getColumnCount();


            while (resultSet.next()) {
                for(int i=2; i<=columnCount;i++){

                    filewrite.append(resultSet.getString(i));
                    filewrite.append(',');
                }
                filewrite.append('\n');
               }
            filewrite.flush();
            filewrite.close();
            connection.close();
            System.out.println("CSV File is Generated successfully.");



        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Please, anyone, explain how to get with column headers also in CSV?

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
teja
  • 93
  • 2
  • 11

1 Answers1

3

You can get this info from the ResultSet metadata.

ResultSetMetaData rsmd = rs.getMetaData();

String name = rsmd.getColumnName(1);
Duong Anh
  • 529
  • 1
  • 4
  • 21
  • 2
    As noted [here](https://stackoverflow.com/a/27206538/2144390) (and elsewhere), `getColumnLabel` is often a safer choice than `getColumnName`. – Gord Thompson Jul 21 '17 at 12:34
  • Thanks Gord, solved my issue. I was selecting with joins from multiple tables using "as" to build a data set to create a pre-defined table from. getColumnName was returning the original column name, not what I had renamed it to in the query. – Noel Murphy Apr 02 '20 at 12:44