将sql查询结果导出到csv或excel

时间:2011-12-19 15:16:52

标签: java sql excel csv

我想将sql查询的结果写入csv或excel文件并将其保存在特定的文件夹中。我想知道是否可以使用java程序实现这一点,该程序可以重用于任何sql查询结果。我还想知道这是否可用于不同类型的数据库(oracle,mysql,MS sql server等)。我打算将保存的文件附加到电子邮件中(这可能直接将sql查询结果导出到电子邮件)。请帮助。

11 个答案:

答案 0 :(得分:9)

使用openCSV API,您可以在csv文件中导出数据。

CSVWriter writer = new CSVWriter(new FileWriter("yourfile.csv"), '\t');
Boolean includeHeaders = true;

java.sql.ResultSet myResultSet = .... //your resultset logic here

writer.writeAll(myResultSet, includeHeaders);

writer.close();

答案 1 :(得分:2)

以下是一个例子:

import java.io.*;
import java.sql.*;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;

public class ExcelFile {
        public static void main(String[] args) {
                try {
                        Class.forName("com.mysql.jdbc.Driver").newInstance();
                        Connection connection = DriverManager.getConnection(
                                        "jdbc:mysql://localhost:3306/test", "root", "root");
                        PreparedStatement psmnt = null;
                        Statement st = connection.createStatement();
                        ResultSet rs = st.executeQuery("Select * from student");

                        HSSFWorkbook wb = new HSSFWorkbook();
                        HSSFSheet sheet = wb.createSheet("Excel Sheet");
                        HSSFRow rowhead = sheet.createRow((short) 0);
                        rowhead.createCell((short) 0).setCellValue("Roll No");
                        rowhead.createCell((short) 1).setCellValue("Name");
                        rowhead.createCell((short) 2).setCellValue("Class");
                        rowhead.createCell((short) 3).setCellValue("Marks");
                        rowhead.createCell((short) 4).setCellValue("Grade");

                        int index = 1;
                        while (rs.next()) {

                                HSSFRow row = sheet.createRow((short) index);
                                row.createCell((short) 0).setCellValue(rs.getInt(1));
                                row.createCell((short) 1).setCellValue(rs.getString(2));
                                row.createCell((short) 2).setCellValue(rs.getString(3));
                                row.createCell((short) 3).setCellValue(rs.getInt(4));
                                row.createCell((short) 4).setCellValue(rs.getString(5));
                                index++;
                        }
                        FileOutputStream fileOut = new FileOutputStream("c:\\excelFile.xls");
                        wb.write(fileOut);
                        fileOut.close();
                        System.out.println("Data is saved in excel file.");
                        rs.close();
                        connection.close();
                } catch (Exception e) {
                }
        }
}

Reference

答案 2 :(得分:2)

这是我的解决方案。 要在主类中插入的代码:

import java.io.*;
import java.sql.*;
import com.company.*;
/**
 * Created by MAXNIGELNEGRO
*/
  String[] filePath =       new String[] {"C:\\Users\\Documents\\MyFile.csv"};
  String[] driverDB =       new String[] {"oracle.jdbc.driver.OracleDriver"};
  String[] stringConnDB =   new String[] {"jdbc:oracle:thin:@//127.0.0.1:1881/mydb"};
  String[] userDB =         new String[] {"pippo"};
  String[] passDB =         new String[] {"pluto"};
  String[] charSep =        new String[] {";"};
  Boolean colomn=   new Boolean (true);
  String[] queryDB =        new String[] {"select * FROM MYQUERY"};


try{
    System.out.println("---------------File exist?------------" + filePath[0]);
    File fileTemp = new File(filePath[0].toString());
    if (fileTemp.exists()){ 
        fileTemp.delete();
        System.out.println("---------------DELETE FILE------------" + filePath[0] );
                } 
   System.out.println("QUERY: ---->"+ queryDB[0].toString());
   exportQueryToCsv exp = new exportQueryToCsv();
   exp.exportQueryToCsv(filePath,driverDB,stringConnDB,userDB,passDB,queryDB, colomn,charSep);
   if (fileTemp.exists()){ 
     System.out.println("---File created---" + filePath[0]);
  }

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

核心课程:

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Created by MAXNIGELNEGRO
 */
public class exportQueryToCsv {
    public exportQueryToCsv(){}
    public static void  exportQueryToCsv (String[] filename, String[] driverDB, String[] connDB
                                            , String[] userDB, String[] passDB, String[] queryDB, Boolean intestaFile
                                            , String[] charSep) throws SQLException, IOException {
        Statement stmt=null;
        ResultSet rset=null;
        Connection conn=null;
        try { DBConn connessione = new DBConn();
        conn=connessione.connect(driverDB[0],connDB[0],userDB[0],passDB[0]);
        conn.setAutoCommit(false);

        stmt = conn.createStatement();

        rset = stmt.executeQuery(queryDB[0]);

        ExportData2CSV csv = new ExportData2CSV();
        csv.ExportData2CSV(rset,filename[0],intestaFile,charSep[0]);

            csv.createFileCsv();
        } catch (SQLException e) {
                e.printStackTrace();
        } catch (IOException e) {
                e.printStackTrace();
        }
        finally {
            if (stmt != null) {stmt.close();}
            if (conn != null) {conn.close();}
            if (rset != null) {rset.close();}



        }


    }
}

这是连接数据库的类DBConn

import java.sql.*;

/**
 * Created by MAXNIGELNEGRO
 */
public class DBConn {
    public DBConn() {
    }
    public Connection connect(String driverDB, String db_connect_str, String db_userid, String db_password) {
        Connection conn;

        try {
            Class.forName(driverDB).newInstance();
            conn = DriverManager.getConnection(db_connect_str, db_userid, db_password);


        } catch (Exception e) {
            e.printStackTrace();
            conn = null;

        }
        return conn;
    }


}

这是从表到结果集检索数据并写入csv文件的类

package com.company;

import java.io.FileWriter;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

/**
 * Created by MAXNIGELNEGRO 
 */
public class ExportData2CSV {
    public ResultSet rset;
    public String filename;
    public Boolean colomnName;
    public String charSep;

    public void ExportData2CSV(ResultSet rset, String filename, Boolean colomnName, String charSep) {
        this.rset = rset;
        this.filename = filename;
        this.colomnName = colomnName;
        this.charSep = charSep;
    }

    public void createFileCsv() throws SQLException, IOException {
        FileWriter cname = null;
        try {

                // WRITE COLOMN NAME
            ResultSetMetaData rsmd = rset.getMetaData();
            cname = new FileWriter(filename);
            if (colomnName) {
                for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                    cname.append(rsmd.getColumnName(i));
                    cname.append(charSep);
                    cname.flush();
                }
                cname.append(System.getProperty("line.separator"));
            }

            // WRITE DATA
            while (rset.next()) {
                for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                    if (rset.getObject(i) != null) {
                        String data = rset.getObject(i).toString().replaceAll(charSep, "");
                        cname.append(data);
                        cname.append(charSep);
                    } else {
                        String data = "null";
                        cname.append(data);
                        cname.append(charSep);
                    }

                }
                //new line entered after each row
                cname.append(System.getProperty("line.separator"));

            }


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

        } finally {
            if (cname != null) {
                cname.flush();
                cname.close();
            }
            if (rset != null) {
                rset.close();
            }

        }

    }
}

答案 3 :(得分:2)

最简单的解决方案。

主要方法

@(Html.Kendo().DropDownList()
      .Name("Users")
      .DataValueField("Id")
      .DataTextField("Username")
      .DataSource(d => d.Read(r => r.Action("UsersAsJson", "User"))
                        .Events(e => e.RequestStart("onRequestStart"))))



var settings = {};

var ticket = new window.Ticket(settings);

function onRequestStart(e){
    ticket.onRequestStart(e);
}

<强> fetchDataFromDatabase

下面的代码计算表中的列数,并存储在结果数组中。

 private List<String> resultSetArray=new ArrayList<>();
 private String username ="";     // Enter DB Username
 private String password = "";    // Enter DB password
 private String url = "";         // Enter DB URL

 Connection connection=DriverManager.getConnection(url,user,pwd);   

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

        fetchDataFromDatabase("SQL queries", connection);
        printToCsv(resultArray);                

 }

<强> printToCsv

private void fetchDataFromDatabase(String selectQuery,Connection connection) throws  Exception{
            try {


                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery(selectQuery);
                int numCols = rs.getMetaData().getColumnCount();

                while(rs.next()) {
                    StringBuilder sb = new StringBuilder();

                    for (int i = 1; i <= numCols; i++) {
                        sb.append(String.format(String.valueOf(rs.getString(i))) + " ");

                    }
                    resultSetArray.add(sb.toString());

                }

            } catch (SQLException e) {
                LOGGER.error("Sql exception " + e.getMessage());
            }

        }

答案 4 :(得分:1)

这是excel数据表

input excel file containing records 嗨,这是你需要3个文件的解决方案1.input thread 2.output thread 3.data structure 4.main 1.input线程读取excel和输出线程写入sql输出 2.data结构是保存和传输数据

(InputThread.java)

    import java.io.*; 
public class InputThread extends Thread{


    String fp; 
    InputString is; 
    String tableName="emp"; 
    String outFile;
    InputThread(String FilePath,String nameOfTheTable,String outFileName){
        fp=FilePath;
        outFile=outFileName;
        tableName=nameOfTheTable;
    }
    public void run(){
        File file = new File(fp);
        String line;
        try{
            BufferedReader br = new BufferedReader(new FileReader(file)); 
            if( (line=br.readLine()) != null)
                is = new InputString(line);

            //transform(is);    

            InputString tmp = new InputString(createTable(line));
            //tmp.next = is;
            is = tmp;
            //tmp = tmp.next;

            for(; (line = br.readLine()) != null; ) {
                tmp.next = new InputString(line);
                tmp = tmp.next;
                transform(tmp); 
                }               

        }catch(Exception e){ System.out.println("Error is :"+e); }

        //traverse();
        new OutputThread(is,outFile).start();
    }
    void transform(InputString x){

        String[] arr = x.getLine().split(",");
        String sql = "insert into "+tableName+" values(";
        for(int i=0;i<arr.length;i++){
            sql+="'"+arr[i]+"'";
            if( (i+1) < arr.length) sql+=",";
        }
        sql+=");";
        x.setLine(sql);

    }
    String createTable(String x){
        String[] arr = x.split(",");
        String sql = "create database vamsidb "+ "use vamsidb "+"create table "+tableName+"(";
        for(int i=0;i<arr.length;i++){
            sql+=arr[i]+" varchar(50)";
            if( (i+1) < arr.length) sql+=",";
        }
        sql+=");";
        return sql;
    }
    /*public void traverse(){
        InputString tmp = is;
        while(is != null){
            System.out.println(is.getLine());
            is=is.next;
        }
    }*/


}

(OutputThread.java)

import java.io.*;
public class OutputThread extends Thread{
    InputString is;
    String outFile;
    OutputThread(InputString linkedList,String outFileName){
        is=linkedList;
        outFile = outFileName;
    }
    public void run(){

        try{
            FileOutputStream fos = new FileOutputStream(outFile);
            while(is != null){              
                fos.write(is.getLine().getBytes());             
                is=is.next;
            }
            fos.close();
        }catch(Exception e){
            System.out.println("Error is :"+e);
         }
    }
}

(Main.java)

public class Main{
public static void main(String[] args){

        InputThread it = new InputThread("sasken.csv","emp","output.sql");

        it.start();     
    }
}

(DataStructure.java)

//此类表示要保存和转换输入的数据结构 //数据作为sql语句的链接列表

class InputString{

    String line;
    InputString next;

    InputString(String x){
        line = x;
    }
    String getLine(){
        return line;
    }   
    void setLine(String x){
        line = x;
    }
}

output result

答案 5 :(得分:1)

很难从任何工具导出结果集数据。

ex:将结果集数据导出到.csv文件时,当数据包含(,)时无法正确导出

请参考下面的Java代码:

它与任何查询输入和结果集中的所有数据类型完美配合

package com.demo.export;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class dataExportService {
    public void getDefendants(Connection con , String db) throws Exception  { 
        @SuppressWarnings("unused")
        Workbook readWorkbook = WorkbookFactory.create(new FileInputStream(".xls file path(C:\\Users\\CEPL\\Desktop\\test.xls)") );
        @SuppressWarnings("resource")
        Workbook writeWorkbook = new HSSFWorkbook();
        Sheet desSheet = writeWorkbook.createSheet("new sheet");

        Statement stmt = null;
        ResultSet rs = null;
        try{
            String query ="QUERY";

            stmt = con.createStatement();
            rs = stmt.executeQuery(query);
            ResultSetMetaData rsmd = rs.getMetaData();
            int columnsNumber = rsmd.getColumnCount();

            Row desRow1 = desSheet.createRow(0);
            for(int col=0 ;col < columnsNumber;col++) {
                Cell newpath = desRow1.createCell(col);
                newpath.setCellValue(rsmd.getColumnLabel(col+1));
            }
            while(rs.next()) {
                System.out.println("Row number" + rs.getRow() );
                Row desRow = desSheet.createRow(rs.getRow());
                for(int col=0 ;col < columnsNumber;col++) {
                    Cell newpath = desRow.createCell(col);
                    newpath.setCellValue(rs.getString(col+1));  
                }
                FileOutputStream fileOut = new FileOutputStream(".xls file path(C:\\Users\\CEPL\\Desktop\\test.xls)");
                writeWorkbook.write(fileOut);
                fileOut.close();
            }
        }
        catch (SQLException e) {
            System.out.println("Failed to get data from database");
        }
    }

}

答案 6 :(得分:0)

是!

您可以使用jdbc连接到不同的数据库类型,然后使用结果(Seen here)创建Excel。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestAccessExcel {
  public static Connection getConnection() throws Exception {
    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    String url = "jdbc:odbc:excelDB";
    String username = "username";
    String password = "pass";
    Class.forName(driver);
    return DriverManager.getConnection(url, username, password);
  }

  public static void main(String args[]) {
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    try {
      conn = getConnection();
      stmt = conn.createStatement();
      String excelQuery = "select * from [Sheet1$]";
      rs = stmt.executeQuery(excelQuery);

      while (rs.next()) {
        System.out.println(rs.getString("BadgeNumber") + " " + rs.getString("FirstName") + " "
            + rs.getString("LastName"));
      }
    } catch (Exception e) {
      System.err.println(e.getMessage());
    } finally {
      try {
        rs.close();
        stmt.close();
        conn.close();

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

答案 7 :(得分:0)

为此,您需要编写一个可以占用任何查询和任何驱动程序的小代码。第一个输入应该是驱动程序名称作为您正在编写的软件的输入。然后,您正在编写的软件应该可以执行任何给定的SQL,并只提供行和列。

下一个任务是解析来自java应用程序的JDBC的ResultSet。您要么将结果写入CSV文件,要么EXCEL基于您拥有java api的优势。

将输出写入CVS很容易,而不是简单。我还没有将数据导出到Excel中。我相信你会找到罐子。

答案 8 :(得分:0)

您可以使用 JDBC 从Java中的数据库中获取记录,然后使用 Apache POI 将数据导出到CSV / Excel。

此外,您可以使用Java的桌面API 通过默认的电子邮件客户端发送电子邮件。

答案 9 :(得分:0)

该解决方案基于属性文件。

配置此选项的位置:

  • 数据库的参数。
  • 可选的额外SQL Where子句。
  • 输出文件的参数。

该过程可以启动bis 4个线程,以同时下载4个表。 如果要再次运行,必须删除生成的文件。 还将创建一个包含过程数据的文本文件(logs.txt)。

----属性文件:ExportProperties.prop --------- 该解决方案将在以下位置编写一份密码版本草案:

C:\ tmp \ test \ ExportProperties.prop

## configuration properties
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@ldap://localhost
username=user
password=pass
fileExtension=_20200623.csv
columSeparator=;
charsetName=CP1252
## export only 10 rows change to false
only10Rows=true
##tables
tableName.1=USER
tableName.1.sqlWhere= user.name IS NOT NULL
tableName.2=ROLL
tableName.3=FIRMA

---------主文件--------

public class ExportTable2CSVMain implements Runnable {
    static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS|");
    static final String folder = "C:\\tmp\\test\\";
    static final Properties prop = getProperties();

    public static void main(String[] args) {
        for (int x = 1; x < 6; x++) {
            try {
                writieLog(0, "Start thread " + x);
                new ExportTable2CSVMain();
                Thread.sleep(1000);
            } catch (final Exception e) {
                e.printStackTrace();
            }
        }
    }

    public ExportTable2CSVMain() {
        final Thread t = new Thread(this);
        t.start(); // start the thread -> run
    }

    @Override
    public void run() {
        int pos = 1;
        String tableName = prop.getProperty("tableName." + pos);
        while (tableName != null) {
            try {
                export(tableName, pos++);
            } catch (final Exception e) {
                e.printStackTrace();
            }
            tableName = prop.getProperty("tableName." + pos);
        }
    }

    private void export(String tableName, int filePos) throws Exception {
        final boolean only10Rows = prop.getProperty("only10Rows", "false").equals("true");
        String extraWhere = prop.getProperty("tableName."+filePos+".sqlWhere");
        if(extraWhere ==null)
            extraWhere = prop.getProperty("sqlWhere");
        if(extraWhere ==null)
            extraWhere = "";
        final String sql = "select * from " + tableName + extraWhere
                + (only10Rows ? " FETCH NEXT 10 ROWS ONLY" : "");
        final String fileName = folder + tableName + prop.getProperty("fileExtension");
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        ExportTable2CSV data2csv = null;
        try {
            data2csv = new ExportTable2CSV(fileName, tableName, filePos);
            if (data2csv.toDo()) {
                conn = getConnection();
                stmt = conn.createStatement();
                rs = stmt.executeQuery(sql);
                data2csv.createFileCsv(rs);
            }
        } catch (final Exception e) {
            final int row = data2csv == null ? -1 : data2csv.row;
            writieLog(filePos, "SQL", "Error", "rows:" + row, tableName, e.getMessage());
            e.printStackTrace();
        } finally {
            try {
                rs.close();
            } catch (final Exception e) {
            }
            try {
                stmt.close();
            } catch (final Exception e) {
            }
            try {
                conn.close();
            } catch (final Exception e) {
            }
        }
    }

    public Connection getConnection() throws Exception {
        Class.forName(prop.getProperty("driver"));
        return DriverManager.getConnection(//
                prop.getProperty("url"),
                prop.getProperty("username"),
                prop.getProperty("password"));
    }

    static private Properties getProperties() {
        File file = new File(folder);
        if (!file.exists()) { // if the folder do not exist create it 
            file.mkdirs();
        }
        file = new File(folder + "ExportProperties.prop");
        if (!file.exists()) {
            try {
                final PrintWriter out = new PrintWriter(
                        new BufferedWriter(new FileWriter(folder + "ExportProperties.prop", true)));

                out.println(//
                        "## configuration properties\n" +
                                "driver=oracle.jdbc.driver.OracleDriver\n" +
                                "url=jdbc:oracle:thin:@ldap://localhost\n"+
                                "username=USER\n" +
                                "password=PASSWORD\n" +
                                "sqlWhere=\n" +
                                "fileExtension=_20200619.csv\n" +
                                "columSeparator=;\n" +
                                "charsetName=CP1252\n" +
                                "##tables\n" +
                                "tableName.1=USER\n" + //
                                "tableName.2=ROLL\n" 
                );
                out.close();
            } catch (final Exception e) {
                e.printStackTrace();
            }
        }
        final Properties prop = new Properties();
        try {
            prop.load(new FileInputStream(folder + "ExportProperties.prop"));
        } catch (final IOException e) {
            e.printStackTrace();
        }
        return prop;
    }

    public static void writieLog(int filePos, String... txt) throws Exception {
        final PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(folder + "logs.txt", true)));
        String sb = "";
        sb += formatter.format(new Date()) + "\t";
        sb += filePos == 0 ? "" : "F-" + filePos + "\t";
        for (final String s : txt) {
            sb += s + "\t";
        }
        System.out.println(sb);
        out.println(sb);
        out.close();
    }
}

---------------- ExportTable2CSV文件-------

/**
 * Created by Jose Manuel Davila (Mel) kailas.mel@gmail.com
 */
public class ExportTable2CSV {
    final String fileName;
    final String table;
    final String columSeparator;
    final Boolean columnName = true;
    final int filePos;
    int row = 0;
    int column = 0;

    public ExportTable2CSV(String fileName, String table, int filePos) {
        this.filePos = filePos;
        this.fileName = fileName;
        this.table = table;
        columSeparator = ExportTable2CSVMain.prop.getProperty("columSeparator", ";");
    }

    public boolean toDo() throws Exception {
        if (new File(fileName).exists()) {// the file exist jet return
            return false;
        }
        writeLine("");
        return true;
    }

    public void createFileCsv(ResultSet rs) throws Exception {
        String sb = "";
        try {
            ExportTable2CSVMain.writieLog(filePos, "FILE", "INI ", table, fileName);
            // WRITE COLUMN NAME
            final ResultSetMetaData rsmd = rs.getMetaData();
            sb = "";
            final List<String> list = new ArrayList<String>();
            if (columnName) {
                for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                    sb += rsmd.getColumnName(i) + columSeparator;
                    list.add(rsmd.getColumnName(i));
                }
                writeLine(sb.toString());
            }
            // WRITE DATA
            while (rs.next()) {
                sb = "";
                column = 0;
                for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                    final Object obj = rs.getObject(i);
                    String data = "";
                    if (obj != null) {
                        if (obj instanceof String) {
                            data = obj.toString();
                            if (data.indexOf(columSeparator) != -1) {
                                if (data.indexOf("\"") != -1) {
                                    data = data.replaceAll("\"", "'");
                                    ExportTable2CSVMain.writieLog(filePos, "FILE", "WITH comm and ; ", "row:" + row,
                                            "Column:" + list.get(column), table, fileName);
                                }
                                data = "\"" + data + "\"";
                            }
                        } else {
                            data = obj.toString();
                        }
                    }
                    sb += data + columSeparator;
                    column++;
                }
                writeLine(sb.toString());
                row++;
            }
            ExportTable2CSVMain.writieLog(filePos, "FILE", "END ", "rows:" + row, table, fileName);
        } catch (final Exception e) {
            ExportTable2CSVMain.writieLog(filePos, "FILE", "Error ", "rows:" + row, table, fileName, e.getMessage());
            e.printStackTrace();
        } finally {
            if (rs != null) {
                rs.close();
            }
        }
    }

    void writeLine(String line) throws Exception {
        if (row > 0 && row % 1000 == 0) {
            System.out.println(filePos + " " + row + " working ...");
        }
        final PrintWriter cname = new PrintWriter(new BufferedWriter((new OutputStreamWriter(
                new FileOutputStream(fileName, true), ExportTable2CSVMain.prop.getProperty("charsetName", "CP1252")))));
        if (line.equals("")) {
            cname.print(line);
        } else {
            cname.println(line);
        }
        cname.close();
    }
}

--------- POM文件pom.xml ----------------

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>ExportTable2CSV</groupId>
  <artifactId>ExportTable2CSV</artifactId>
  <version>1.1.0</version>
  <name>ExportTable2CSV</name>
  <properties>
        <ojdbc8.version>18.3.0.0.0</ojdbc8.version>
  </properties>

  <dependencies>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>${ojdbc8.version}</version>
            <scope>runtime</scope>
        </dependency>
  </dependencies>
</project>

要导出到由制表符分隔的列。

在属性文件中更改此道具:

fileExtension=_mel.txt
columSeparator=\t

答案 10 :(得分:0)

这工作得很好:

PreparedStatement statement = famuat.prepareStatement(sql query);
ResultSet result = statement.executeQuery();
ResultSetMetaData md = result.getMetaData();

FileWriter fw = new FileWriter(filepath);
int columnCount = md.getColumnCount();

for (int i = 1; i <= columnCount; i++) {
    columnheader = md.getColumnName(i);
   // System.out.println(columnheader);
    if (i > 1) System.out.print(" | ");
    if (i > 1) System.out.print(",  ");
    if (i > 1) System.out.print("\t");

    fw.append(columnheader.toUpperCase());
    fw.append(",");

    System.out.println(columnheader);
}

while (result.next()) {
    fw.append("\r\n");
    for (int i = 1; i <= columnCount; i++) {
        if (i > 1) System.out.print(" | ");
        if (i > 1) System.out.print(",  ");
        if (i > 1) System.out.print("\t");

        fw.append(result.getString(i));
        fw.append(",");
        row = result.getString(i);
        System.out.println(row);
    }
}