【问题标题】:Java Mysql table data output formattingJava Mysql表数据输出格式化
【发布时间】:2017-06-12 14:22:01
【问题描述】:
这是我的 MySql 表:
我想在命令行中显示查询的输出,如下所示:
我已经编写了下面的代码来循环,但我只得到第一行,我需要修改什么??
ResultSet rs2 = stmt.executeQuery(table_retrive);
String[] cols = new String[itemList.size()];
int[] rec =new int[itemList.size()];
for (int i = 0; i < itemList.size(); i++) {
while (rs2.next()) {
cols[i] =(String) itemList.get(i);
rec[i] = rs2.getInt(cols[i]);
System.out.println(rec[i]+" ");
}
}
【问题讨论】:
标签:
java
mysql
sql
database
jdbc
【解决方案1】:
你的两个循环是错误的。从i=0 开始,然后遍历整个ResultSet,填充你的第一个数组位置。完成此操作后,i 将递增,您尝试再次迭代ResultSet,但光标位于ResultSet 的末尾,因此rs2.next() 返回false,代码将不会被执行.
所以你有两个解决方案:
- 正确处理循环。不幸的是,我不知道,无论如何你都在尝试做什么,因为这是一些没有 OOP 的类 C 代码,它不显示语义,然后你有这个
itemList,它似乎保存了预设值,你读出了这个列表,将哪一列用于i-th 位置。这似乎很奇怪。也许切换循环可以达到预期效果:从while 开始并嵌套for。
- 在
while 之后用rs2.beforeFirst() 重置ResultSet 的光标。警告:这可能会引发SQLFeatureNotSupportedException。并非所有数据库都可以向后移动光标。这当然是一个非常丑陋的解决方案,因为您应该首先解析整行一次。
【解决方案2】:
尝试使用 printf() 或 format() 方法。与 c lang 中的 printf 方法相同。您可以传递参数和差异。看link1
还有link 2
Example : System.out.printf("%d%5s%10d", 5,"|",10);
output : 5 | 10
【解决方案3】:
使用这个我得到了所有的值,但在一行中:
while (rs2.next()) {
for (int i = 0; i < itemList.size(); i++) {
cols[i] =(String) itemList.get(i);
rec[i] = rs2.getInt(cols[i]);
System.out.print(rec[i]+" ");
}
}
但我需要像行一样划分。
【解决方案4】:
内部循环的使用是你的问题。
您可以增强您的代码以删除代码中第二个循环的使用,它基本上什么都不做。您可以遍历您的结果集,并在同一循环中使用递增的变量来相应地保存值。
显示的代码在您的问题中实现了一半,因此很难准确地告诉您需要做什么。不过,这里尝试为您解决问题:
while (rs2.next()) {
System.out.println(rs2.getInt(1) + "\t |" + rs2.getString(2) + "\t |" + rs2.getString(3));
}
根据问题表中的列名,假设column2和column3是String的。
您可以在此代码中添加必要的细节以根据您的用例完成它,但我只是以一行显示记录为例。
编辑:
OP 有他自己的编程方式,但为了满足他在评论中提出的问题 - 你可以这样做。
while (rs2.next()) {
for (int i = 0; i < itemList.size(); i++)
{
cols[i] =(String) itemList.get(i);
rec[i] = rs2.getInt(cols[i]);
System.out.print(rec[i]+"\t |");
}
System.out.println();
}