我有一个java函数,用于从jlist中获取名为“readyList”的字符串,并从mysql工作台表中提取数据,意图为.csv文件中的每个字符串写一行。使用当前代码,它成功地一次拉出一个数据,就像我想要的那样,但它只写最后一行而不是所有行。我希望将所有行都写在.csv文件中。请帮忙!
int[] selectedIx = readyList.getSelectedIndices();
for (int i = 0; i < selectedIx.length; i++) {
// while (i < selectedIx.length) {
Object sel = readyList.getModel().getElementAt(selectedIx[i]);
Statement s1 = DBConnect.connection.createStatement();
String selTable01 = "SELECT Sku As s, Qty As q, Orig_Retail As prce, Orig_Sku As orgsk, Store As strcd "
+ "FROM completed_lines WHERE Form_Name = '" + sel + "' AND Warranty = 'true'";
s1.execute(selTable01);
try (ResultSet rs01 = s1.getResultSet()) {
fWriter = new FileWriter("Exports/Transfers/" + /* frmNm.replace(":", "_") */"EBW_" + GtDates.fdate + ".csv", false);
writer = new BufferedWriter(fWriter);
String header = "slip_number,slip_type,out_store,in_store,item_number,quantity,price,comment,to_num";
writer.write(header);
writer.newLine();
while (rs01.next()) {
String strcode = rs01.getString("strcd");
String sku = rs01.getString("s");
String qty = rs01.getString("q");
String price = rs01.getString("prce");
String orgsku = rs01.getString("orgsk");
//System.out.println(frmNm.split("_")[1] + qty + "," + sku + "," + vendor + "," + desc1 + "," + reas + "," + descdmg + "," + orgR + "," + nwsku + "," + desc2 + "," + qtyI);
String line = ""+","+"out"+","+strcode+","+"RTV"+","+sku+","+qty+","+price+","+"EBW"+","+orgsku;
writer.write(line);
writer.newLine();
}
}
// JOptionPane.showMessageDialog(frame, "All Data from Selected Forms has been Exported");
}
// FormCompelted();
writer.close();
}
}
答案 0 :(得分:0)
此代码存在一些问题。你只得到最后一个结果的原因是因为这一行:
fWriter = new FileWriter("Exports/Transfers/" + /* frmNm.replace(":", "_") */"EBW_" + GtDates.fdate + ".csv", false);
这一行在你的循环中。 false
作为最后一个参数告诉FileWriter
不要追加。换句话说,false
表示覆盖文件(如果存在)。由于这是在您的循环中,每个结果都会覆盖最后一个结果创建的文件。您应该在循环之外创建FileWriter
,可能是尝试使用资源。这样您就可以移除writer.close()
来电,这应该是finally
阻止。
与原始问题无关但您应该注意的事项:您每次循环迭代都会创建一个新的Statement
。这可能是一项昂贵的操作。您应该使用PreparedStatement
代替。在循环外创建它,然后只需设置参数并在循环内执行它。它还会实现AutoCloseable
,因此您也可以尝试使用资源创建它,可能与您在FileWriter
中创建的相同。