java - 在 CSV 文件上用 Java 编写 MS 访问表
问题描述
我正在编写一个小软件,它会自动将 .mdb 文件的名为“Magazzino”的表导出到 csv 文件。一切正常,我使用“UCANACCESS”库编写了这段代码。
package it.simonesaleri.automation.software;
import java.io.*;
import java.sql.*;
import java.util.ArrayList;
public class AutomationMain {
public static void main(String[] args) throws IOException {
ArrayList<String> arr = new ArrayList<String>();
try {
//OPENING CONNECTION TO DATABASE
Connection conn = DriverManager.getConnection("jdbc:ucanaccess://eCommerce.mdb");
FileWriter writer = new FileWriter("eCommerce.csv");
System.out.println("Connection to Database");
Statement s = conn.createStatement();
//SQL INJECT CODE
String sqlString = "SELECT * FROM Magazzino";
ResultSet rs = s.executeQuery(sqlString);
ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();
while (rs.next()) {
for (int i = 1; i < columnsNumber; i++) {
System.out.println(rs.getString(i));
arr.add(rs.getString(i));
}
}
//SAVING INTO THE FILE
for(String str: arr)
{
writer.append(str);
writer.append(";");
}
writer.flush();
writer.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我遇到了问题...我真的不明白如何在 .csv 文件上创建新行,同时在其上写入。我尝试了.append("\n")
or .append("\r\n")
,但结果是这样的:
1;244;300817; BA9S - 220R LAMPADA LED 220VAC ROSSA;;;;;;;;;;;;;;;;12.14;3.6420000000000003;5.6451;5.463000000000001;5.098800000000001;4.7346;5.88183;PCE;22.0;IVA 22%;0.0;0.0;0.0;0.0;;731;CHINT;CHT;0;null;null;0;null;null;0;null;null;0;null;null;0;null;null;CHTCHTAUTOM-A01;;;null;null;FALSE;FALSE;TRUE;null;0;;;;;;;;;;;;;null;null;null;null;null;null;null;null;null;FALSE;FALSE;0;0;2;9713;BSD450B/8A; CONVERTITORE BRUSHLESS FD BSD450B/8A;;;;;;;;;;;;;;;;680.0;680.0;1054.0;1020.0;952.0;884.0;1098.2;;22.0;IVA 22%;0.0;0.0;0.0;0.0;;0;null;null;0;null;null;0;null;null;0;null;null;0;null;null;0;null;null;;;;null;null;FALSE;FALSE;TRUE;null;0;;;;;;;;;;;;;null;null;null;null;null;null;null;null;null;FALSE;FALSE;0;0;
而不是这个(我需要的结果):
1;244;300817; BA9S - 220R LAMPADA LED 220VAC ROSSA;;;;;;;;;;;;;;;;12.14;3.6420000000000003;5.6451;5.463000000000001;5.098800000000001;4.7346;5.88183;PCE;22.0;IVA 22%;0.0;0.0;0.0;0.0;;731;CHINT;CHT;0;null;null;0;null;null;0;null;null;0;null;null;0;null;null;CHTCHTAUTOM-A01;;;null;null;FALSE;FALSE;TRUE;null;0;;;;;;;;;;;;;null;null;null;null;null;null;null;null;null;FALSE;FALSE;0;0;
2;9713;BSD450B/8A; CONVERTITORE BRUSHLESS FD BSD450B/8A;;;;;;;;;;;;;;;;680.0;680.0;1054.0;1020.0;952.0;884.0;1098.2;;22.0;IVA 22%;0.0;0.0;0.0;0.0;;0;null;null;0;null;null;0;null;null;0;null;null;0;null;null;0;null;null;;;;null;null;FALSE;FALSE;TRUE;null;0;;;;;;;;;;;;;null;null;null;null;null;null;null;null;null;FALSE;FALSE;0;0;
解决方案
我想你可以这样做:
StringBuilder sb = new StringBuilder("");
while (rs.next()) {
// Clear StringBuilder object in prep for a new CSV line
sb.setLength(0);
// Create custom CSV data line using semicolon (;) as delimiter...
for (int i = 1; i < columnsNumber; i++) {
/* IF StringBuilder is not empty then add a semicolon
to the end of the last piece of columnar data that
was appended before appending this next piece of
columnar data. */
if (!sb.toString().isEmpty()) {
sb.append(";");
}
sb.append(rs.getString(i));
}
// Add the system newline character to custom CSV data line.
sb.append(System.lineSeparator());
// Add the newly created CSV line to the ArrayList.
arr.add(sb.toString());
}
// Write to File...
for(String str: arr) {
/* str already has the newline character appended
to it from the process above. */
writer.append(str);
// immediate write:
writer.flush();
}
writer.close(); // Close the writer.
推荐阅读
- java - 在 IntelliJ 中设置连接 Apache Derby
- oracle - 如何创建触发器以检查更新的字段值
- vue.js - Vue - 使用道具分配类的方程
- python - 如何在构造函数中使用额外参数正确初始化 dict 的子类?
- amazon-web-services - ELK 堆栈(Elasticsearch、Logstash、Kibana)——logstash 是必要的组件吗?
- c - 当我初始化包含动态数组的结构时,如何避免 valgrind(或其他 memcheck 工具)误报?
- ajax - 如何通过 ajax 调用 .net 核心中的控制器来修复 405 错误
- ruby-on-rails - 另一个库的存根方法的 RSpec 存根弃用警告
- python - 如何在python中选择相同的日期返回n年?
- javascript - 当用户单击下降块时,尝试为 webgl 提供随机颜色