JDBC ResultSet到ArrayList,ArrayList到.txt文件

时间:2017-03-05 16:22:48

标签: jdbc

我得到了以下代码来检索表中的所有行:

        String MakeTXT = "USE SRO_VT_SHARD Select * from _RefTeleLink";
        pst = conn.prepareStatement(MakeTXT);
        rs = pst.executeQuery();
        ArrayList<String> links = new ArrayList<>();

        int i = 1;
        String rows = "";

        while (rs.next()) {
            for (i = 1; i <= 22; i++) {
                links.add(rs.getString(i));

                if (i == 22) {
                    links.add("\n");
                }
            }
        }
        rows = String.join("\t", links);
        System.out.println(rows);
    }
}

我想做的是:

  • 从表格中选择所有行。见结果:prnt.sc/egbh4o
  • 将所有选定的行写入.txt文件
  • .txt文件必须看起来像这样(字面上复制粘贴行):http://prntscr.com/egbhn4

我的代码目前输出的内容: output

这样做是因为有22列,当循环达到22时,它会向ArrayList添加一个输入。

我真正想要的是使用ResultSet复制整行的方法,而不是使用for循环循环22次,并在22个结果中生成一行。

到处都看,但找不到任何东西...... :(

1 个答案:

答案 0 :(得分:0)

在读取列值时,不需要ArrayList来保存列值。我最好使用StringBuilder,如下图所示,连接循环中的制表符,然后用换行符替换最后一个。

    String MakeTXT = "USE SRO_VT_SHARD Select * from _RefTeleLink";
    Statement stm = conn.createStatement();
    ResultSet rs = stm.executeQuery(MakeTXT);
    List<String> rows = new ArrayList<>();
    StringBuilder row = new StringBuilder();
    ResultSetMetaData meta = rs.getMetaData();
    final int colCount = meta.getColumnCount();
    while (rs.next()) {
        row.setLength(0);
        for (int c=0; c<=colCount; c++)
            row.append(rs.getString(c)).append("\t");
        row.setCharAt(row.length()-1, '\n');
        rows.add(row.toString());
    }       
    rs.close();
    stm.close();