我想将查询结果打印到.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
如何正确地做到这一点?
答案 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: ");
}