这是我的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]+" ");
}
}
答案 0 :(得分:0)
使用内循环是你的问题。
您可以增强代码以消除代码中第二个循环的使用,它基本上什么都不做。您可以使用递增的变量循环遍历结果集并在同一循环中循环使用相应的值。
显示的代码在您的问题中实现了一半,因此很难准确地告诉您需要做什么。不过,这是尝试为您解决问题:
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();
}
答案 1 :(得分:0)
尝试使用printf()或format()方法。它与c lang中的printf方法相同。你可以传递参数和差异。看看link1 并link 2
Example : System.out.printf("%d%5s%10d", 5,"|",10);
output : 5 | 10
答案 2 :(得分:0)
你的两个循环是错误的。从i=0
开始,然后在整个ResultSet
上迭代一次,填充第一个数组位置。完成此操作后,i
会递增,您尝试再次迭代ResultSet
但光标位于ResultSet
的末尾,因此rs2.next()
返回{{} 1}}并且代码不会被执行。
所以你有两个解决方案:
false
似乎保留预设值而你读出这个列表,列出itemList
个位置的列。这看起来很奇怪。也许切换循环可以实现所需:从i
开始并嵌套while
。for
重置ResultSet
之后while
的光标。警告:这可能会抛出rs2.beforeFirst()
。并非所有数据库都可以向后移动光标。这当然是一个非常难看的解决方案,因为你应该首先解析整行一次。答案 3 :(得分:0)
使用这个,我得到了所有的值,但是在一行中:
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]+" ");
}
}
但我需要像行一样划分。