如何将我的 sql 查询结果集导出为 CSV 格式?
How to export my sql query result set to CSV format?
我正在尝试将我的数据库结果集导出到 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);
使用:
writer.writeNext(data, false);
您可以使用 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);
我正在尝试将我的数据库结果集导出到 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);
使用:
writer.writeNext(data, false);
您可以使用 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);