2013-03-02 90 views
3

我正在處理數據庫分配並遇到問題。 我們需要一次打印3行,每行3行停止並提示用戶繼續或中斷。resultset.next()循環中的打印語句不打印

這是使用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; 
    } 
} 

對於給定的代碼,所有的 '的System.out.println(值)' 中的 '如果(rset.next())' 只System.out.println("Invalid input '" + seenextreviews + "'");System.out.println(rset.getInt("rating")...);打印,而一切不打印。

但是,在詢問用戶輸入之前,console.readLine(「text」)仍然會打印文本。

爲什麼我的打印語句不打印?是唯一的替代方法來更改查詢一次選擇3行,並調用多個查詢?

回答

2

對於給定的代碼,所有的的 '的System.out.println(值)' '內,如果(rset.next())' 僅

ResultSet#next

將光標從當前位置移動一行。

因此,它看起來像你的查詢返回單行並且您在if (rset.next())條件讀它,去while(rset.next())你從第2行到最後一讀,但因爲你沒有當第二排讀取,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

可以這樣進行:

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; 
     } 
    } 
} 
+0

需要注意的是你打印,即使沒有結果的稱號。 – 2013-03-03 22:38:12

+0

@LuiggiMendoza:是的..現在已經解決了.. – 2013-03-04 03:47:54

+0

@Alexander:查看更新後的答案。 – 2013-03-04 03:50:17