2017-06-12 85 views
-1

這裏是我的MySQL表:Java的MySQL表數據輸出格式

mysql table

我想說明的查詢在命令行下面的輸出:

enter image description here

我已經寫下面的代碼循環,但我只得到第一行,我有什麼修改?

   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

內循環的使用是你的問題。

您可以增強您的代碼以刪除代碼中第二個循環的用法,它基本上什麼也不做。你可以遍歷你的結果集,並使用遞增的變量在相同的循環中相應地保存值。

在您的問題中顯示的一半代碼已實現,因此很難準確地告訴您需要完成哪些操作。儘管如此,下面就來解決這個問題你嘗試:

while (rs2.next()) { 
    System.out.println(rs2.getInt(1) + "\t |" + rs2.getString(2) + "\t |" + rs2.getString(3)); 
} 

基於從問題表中的列名,假設列2和欄3是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(); 
} 
0

嘗試使用printf()或format()方法。它和c lang中的printf方法一樣。你可以傳遞參數和差異。看看link1link 2

Example : System.out.printf("%d%5s%10d", 5,"|",10); 
output : 5 |  10 
0

你的兩個循環是錯誤的。從i=0開始,然後在整個ResultSet上迭代一次,填充第一個陣列位置。完成後,i將遞增,並且您嘗試第二次迭代ResultSet,但光標位於ResultSet的末尾,因此rs2.next()返回false,代碼將不會執行。

所以,你有兩種解決方案:

  1. 正確處理循環。不幸的是,我不知道,你試圖做什麼,因爲這是一些沒有OOP的類C代碼,它沒有顯示語義,然後你有這個似乎保存預置值的itemList,你讀出這個列表,其中第i列的位置。這看起來很奇怪。也許切換循環是需要的:從while開始並嵌套for
  2. whilers2.beforeFirst()之後重置ResultSet的光標。警告:這可能會引發SQLFeatureNotSupportedException。並非所有數據庫都可以向後移動光標。這當然是一個非常難看的解決方案,因爲你應該首先解析整行。
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]+" "); 
           } 
         } 

但我需要一個像行來劃分。