将结果集写入csv文件

时间:2013-09-19 08:38:42

标签: java arraylist resultset

我有一个方法getstaffinfo,它有3个参数(var_1,connection,filewriter fw),var_1值是从文本文件中读取的。因此,基于从文本文件传递的所有var_1值,将多次调用该方法。约(15000)

public static String getstaffid(String var_1, Connection connection,
        FileWriter fw) throws SQLException, Exception
// Create a statement
{
    String record = null;
    ResultSet rs = null;
    Statement stmt = connection.createStatement();
    boolean empty = true;
    try {
        rs = stmt
                .executeQuery("select username, firstname, lastname, middlename, street, city, stateorprovince, ziporpostalcode, countryorregion, fax, phone, extension, mobile, pager, title, primaryemail, secondaryemail, officename, description, comments, suspendeddate, userdata, employeeid, createuser, updateuser, createdate, updatedate, employeetype, servicedeskticketnumber, startdate, enddate, manager, businessapprover, technicalapprover, delegate, location, jobcodes, customproperty1, customproperty2, customproperty3, customproperty4, customproperty5, customproperty6, customproperty7, customproperty8, customproperty9, customproperty10 from globalusers where username = '"+ var_1 + "'");
        ResultSetMetaData metaData = rs.getMetaData();
        int columns = metaData.getColumnCount();
        ArrayList<String> records = new ArrayList<String>();

            while (rs.next()) {
            empty = false;

            //record = rs.getString(1) + " " + rs.getString(2) + " " + rs.getString(3) + " " + rs.getString(4) + " " + rs.getString(5) + " " + rs.getString(6) + " " + rs.getString(7) + " " + rs.getString(8) + " " + rs.getString(9) + " " + rs.getString(10) + " " + rs.getString(11) + " " + rs.getString(12) + " " + rs.getString(13) + " " + rs.getString(14) + " " + rs.getString(15) + " " + rs.getString(16) + " " + rs.getString(17) + " " + rs.getString(18) + " " + rs.getString(19) + " " + rs.getString(20) + " " + rs.getString(21) + " " + rs.getString(22) + " " + rs.getString(23) + " " + rs.getString(24) + " " + rs.getString(25) + " " + rs.getString(26) + " " + rs.getString(27) + " " + rs.getString(28) + " " + rs.getString(29) + " " + rs.getString(30) + " " + rs.getString(31) + " " + rs.getString(32) + " " + rs.getString(33) + " " + rs.getString(34) + " " + rs.getString(35) + " " + rs.getString(36) + " " + rs.getString(37) + " " + rs.getString(38) + " " + rs.getString(39) + " " + rs.getString(40) + " " + rs.getString(41) + " " + rs.getString(42) + " " + rs.getString(43) + " " + rs.getString(44) + " " + rs.getString(45) + " " + rs.getString(46) + " " + rs.getString(47);

            for (int i = 1; i <= columns; i++) {
                String value = rs.getString(i);
                records.add(value);
            }
            for (int j = 0; j < records.size(); j++) {
                 record = records.get(j) + ",";
            }
             fw.append(record);
            }
            /*fw.append(rs.getString(1));
            fw.append(',');
            fw.append(rs.getString(2));
            fw.append(',');
            fw.append(rs.getString(3));
            fw.append('\n'); */

            } finally {
        fw.flush();
        rs.close();
        stmt.close();
    }

    return record;
}

正如您所看到的,我正在执行47个值的查询,这些值可以为null或者可以有一些值。

然后我遍历这47列,取值并将其存储到数组列表中。然后我迭代数组列表并用逗号分隔值将所有值写入字符串记录。哪个写入csv文件。

但它不能正常工作。任何投入都将受到赞赏......

2 个答案:

答案 0 :(得分:1)

您可能已经解决了这个问题。只是让你知道我刚刚尝试使用你的代码,发现问题就在这里:

record = records.get(j) + ",";

你应该使用这样的东西:

record = record  + records.get(j) + ",";

同时将String更改为StringBuffer可以提高效果。

答案 1 :(得分:0)

你没有写出你所面对的确切问题,但有一个肯定:你永远不会在文件中写一个换行符,所以所有数据都在一行中。

while (rs.next()) {
... // your code, with the for loops

    fw.append(record); //writing out the line, from your code
    fw.append("\r\n"); //line break -- add this line
} //this is the end of the "while(rs.next())" loop
...
相关问题