我正在进行数据库分配,但我遇到了问题。 我们需要一次打印3行,每行3行停止并提示用户继续或中断。
这是将Java JDBC与Oracle数据库结合使用。
if (rset.next()){
// At this point, there are reviews to show
int rinc = 0;
String seenextreviews = "y";
System.out.println("Rating - Text - Reviewer - RDate");
while(rset.next()){
// Iterate through the result set
System.out.println("Increment: " + rinc);
if(rinc % 3 == 0) {
// Displayed 3 reviews
seenextreviews = "maybe";
while(!seenextreviews.equals("y") && !seenextreviews.equals("n")){
seenextreviews = console.readLine("See next reviews (y/n)? ");
if (!seenextreviews.equals("y") && !seenextreviews.equals("n")){
System.out.println("Invalid input '" + seenextreviews + "'");
}
}
if (seenextreviews.equals("n")) {
System.out.println("Breaking...");
break;
} else {
System.out.println("Continue...");
}
}
System.out.println(rset.getInt("rating") + " - " +
rset.getString("text") + " - " +
rset.getString("reviewer") + " - " +
rset.getString("rdate"));
rinc = rinc + 1;
}
}
对于给定的代码,'if(rset.next())'中的所有'System.out.println(values)'只打印System.out.println("Invalid input '" + seenextreviews + "'");
和System.out.println(rset.getInt("rating")...);
,而其他一切都没有打印打印。
但是,console.readLine(“text”)仍会在询问用户输入之前打印文本。
为什么我的打印报表没有打印?是更改查询以一次选择3行并调用多个查询的唯一选择吗?
答案 0 :(得分:2)
对于给定的代码,'if(rset.next())'中的所有'System.out.println(values)'仅
将光标从当前位置向前移动一行。
因此,看起来你的查询返回一行并且你在if (rset.next())
条件下读取它,当你从第二行到最后一行读到while(rset.next())
时,你没有第二行阅读,while-loop
结束。
可能的解决方案:使用标志打印标题:
int rinc = 0;
String seenextreviews = "y";
while(rset.next()) {
//this serves as flag
if (rinc == 0) {
System.out.println("Rating - Text - Reviewer - RDate");
}
//rest of your code logic...
}
答案 1 :(得分:1)
您可以这样继续:
int rinc = 0;
boolean firstTime = true;
String seenextreviews = "y";
while (rs.next())
{
if(firstTime)
{
System.out.println("Rating - Text - Reviewer - RDate");
firstTime = false;
}
System.out.println(rset.getInt("rating") + " - " +
rset.getString("text") + " - " +
rset.getString("reviewer") + " - " +
rset.getString("rdate"));
rinc += 1;
if (rinc == 3)
{
boolean flag = false;
while (true)
{
String seenextreviews = console.readLine("See next reviews (y/n)? ");
if ("N".equalsIgnoreCase(seenextreviews.trim()))
{
flag = true;
break;
}
else if ("Y".equalsIgnoreCase(seenextreviews.trim()))
{
rinc = 0;
break;
}
else
{
System.out.println("Invalid input . Try again");
continue;
}
}
if (flag)
{
break;
}
}
}