Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将我的sql查询结果集导出为CSV格式?_Java_Java 8_Apache Poi_Export To Csv_Opencsv - Fatal编程技术网

Java 如何将我的sql查询结果集导出为CSV格式?

Java 如何将我的sql查询结果集导出为CSV格式?,java,java-8,apache-poi,export-to-csv,opencsv,Java,Java 8,Apache Poi,Export To Csv,Opencsv,我正在尝试将我的数据库结果集导出到csv文件,这里我尝试这样做,我正在获取数据,但格式不正确。有人能帮我解决这个问题吗 import com.opencsv.CSVWriter; public class DbToCSV { @SuppressWarnings("deprecation") public static String RetrieveData(String filename) throws Exception { Strin

我正在尝试将我的数据库结果集导出到csv文件,这里我尝试这样做,我正在获取数据,但格式不正确。有人能帮我解决这个问题吗

import com.opencsv.CSVWriter;

public class DbToCSV {

    @SuppressWarnings("deprecation")
    public static String RetrieveData(String filename) throws Exception {

        String readFile = readFile(filename);

        String sql = readFile;
        System.out.println(sql);
        PreparedStatement statement;

        DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
        String mysqlUrl = "jdbc:mysql://localhost:3306/employee";
        Connection con = DriverManager.getConnection(mysqlUrl, "root", "root");
        statement = con.prepareStatement(sql);
        ResultSet rs = statement.executeQuery();
        System.out.println("Process Started");
        String file = filename + "/elastic1.csv";
        System.out.println(file);
        CSVWriter writer = new CSVWriter(new FileWriter(file));

        ResultSetMetaData Mdata = rs.getMetaData();
        String line1[] = { "id", "id_name", "name", "attribute_name", "values" };
        writer.writeNext(line1);
        String data[] = new String[5];
        while (rs.next()) {
            data[0] = new Integer(rs.getInt("id")).toString();
            data[1] = new Integer(rs.getInt("id_name")).toString();
            data[2] = rs.getString("name");
            data[3] = rs.getString("values");
            data[4] = rs.getString("data_part");
            writer.writeNext(data);
        }
        writer.flush();
        System.out.println("Data entered");
        return file;
    }

    public static void main(String[] args) throws Exception {
        RetrieveData("/home/Pictures");
    }
}

有一个版本的
writeNext()
采用一个布尔值,该布尔值控制是将引号应用于所有值,还是只应用于需要引用的值。您正在使用的引用了所有值

而不是:

writer.writeNext(data);
使用:

见:

您可以使用writeNext的重载方法,该方法接受布尔值作为参数

void writeNext(String[] nextLine, boolean applyQuotesToAll)
在此过程中,将布尔值设置为false以忽略引号

CSVWriter writer = new CSVWriter(outputfile, ',',
                                 CSVWriter.NO_QUOTE_CHARACTER,
                                 CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                                 CSVWriter.DEFAULT_LINE_END);
[编辑]

还可以使用构造函数禁用引号

CSVWriter writer = new CSVWriter(outputfile, ',',
                                 CSVWriter.NO_QUOTE_CHARACTER,
                                 CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                                 CSVWriter.DEFAULT_LINE_END);

得到相同的结果@vmalletIts not working@ranjan您能更新问题中的代码段吗?如果这不起作用,请尝试使用此构造函数CSVWriter writer=new CSVWriter(outputfile,,,CSVWriter.NO_QUOTE_字符,CSVWriter.DEFAULT_转义_字符,CSVWriter.DEFAULT_行_结束);您可以查看此帖子,