结果集打印到txt文件

时间:2014-07-13 16:41:19

标签: java mysql resultset

我想将查询结果打印到.txt文件。 怎么做?我尝试使用或不使用.tostring打印它,但它仍然不是我想要的结果。

这是我的代码

try {
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ta", "root", "root");
    Statement st = con.createStatement();
    String query = "select count(no) as 'jumlah',kelompok from email group by kelompok";
    //System.out.println(query);
    ResultSet rs = st.executeQuery(query);

    while (rs.next()) {
        dataset.setValue( Integer.parseInt(rs.getString(1)), "Jumlah", rs.getString(2));
    }
    try {
        PrintStream out = new PrintStream(new FileOutputStream("OutFile.txt"));
        String jumlahemail = "select count(*) from email";
        ResultSet rs1 = st.executeQuery(jumlahemail);
        out.println("E-mail yang diterima adalah sebanyak: "+rs1.toString());
        out.println("Dengan detail: ");
        out.println(rs.toString());
        out.close();
    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    }
} catch (SQLException ex) {
    Logger.getLogger(GUI.Home.class.getName()).log(Level.SEVERE, null, ex);
}

结果是:

E-mail yang diterima adalah sebanyak: com.mysql.jdbc.JDBC4ResultSet@81c868
Dengan detail: 
com.mysql.jdbc.JDBC4ResultSet@8c241a

如何正确地做到这一点?

3 个答案:

答案 0 :(得分:0)

当您致电rs1.toString()时,您将获得toString()的默认Object实施,其中会打印出类名和onstance哈希值(com.mysql.jdbc.JDBC4ResultSet@81c868)。

您要做的是从ResultSet中提取查询结果并打印它。 使用rs1.getInt(1)获取查询提取的计数。

参见参考here

编辑(在问题中编辑后):

首先,我将第一个查询更改为:

String query = "select count(kelompok),kelompok from email group by kelompok";

因为您按kelompok进行分组,所以这就是您想要计算的列。

其次,您对结果集的迭代:

while (rs.next()) {
    dataset.setValue( Integer.parseInt(rs.getString(1)), "Jumlah", rs.getString(2));
}

我不知道dataset是什么,但是计数返回一个整数,因此尝试读取字符串并将其转换为整数是没有意义的。我建议你使用地图:

Map<String,Integer> map = new LinkedHashMap<String,Integer>();
while (rs.next()) {
    map.put (rs.getString(2), rs.getInt(1));
}

请注意,我选择地图的键为kelompok(无论这意味着什么),并将值作为计数。

第二个查询似乎是多余的,因为您可以从第一个查询的结果中获取它检索的数据(总计数)。

我们可以将第一个查询结果集的迭代更改为:

Map<String,Integer> map = new LinkedHashMap<String,Integer>();
int total = 0;
while (rs.next()) {
    int count =  rs.getInt(1);
    total += count;
    map.put (rs.getString(2), count);
}

现在您已经拥有了将数据输出到文件所需的一切:

PrintStream out = new PrintStream(new FileOutputStream("OutFile.txt"));
out.println("E-mail yang diterima adalah sebanyak: "+ total);
out.println("Dengan detail: ");
for (String s : map.keySet()) {
    out.println(s + " = " + map.get(s)); // you might want to change the formatting
}
out.close();

答案 1 :(得分:0)

什么是rs.toString()?目前尚不清楚。

try {
    PrintStream out = new PrintStream(new FileOutputStream("OutFile.txt"));
    String jumlahemail = "select count(*) from email";
    ResultSet rs1 = st.executeQuery(jumlahemail);
    out.println("E-mail yang diterima adalah sebanyak: "+rs1.getInt(1));
    out.println("Dengan detail: ");
    out.println(rs.toString());
    out.close();
} catch (FileNotFoundException ex) {
    ex.printStackTrace();
}

试试这段代码。

答案 2 :(得分:0)

首先,在java中这样的事情不会像这样工作

        ResultSet rs1 = st.executeQuery(jumlahemail);
        out.println("E-mail yang diterima adalah sebanyak: "+rs1.toString());
        out.println("Dengan detail: ");
        out.println(rs.toString());

使用此rs1.toString()尝试实现的目标如果您在任何对象上调用toString(),它只会为您提供full-qualified-name-of-the-class@HashCode

如果您想从ResultSet中获取数据,则需要首先使用ResultSet这样的内容来遍历next()

ResultSet rs1 = st.executeQuery(jumlahemail);
while(rs1.next())
{          
    out.println("E-mail yang diterima adalah sebanyak: " + rset.getInt(1));
    out.println("Dengan detail: ");
 }