2017-04-11 13 views
0

データベースから行数を取得するクラスがありますが、ここでは結果セットオブジェクトをサーブレットクラスに戻し、それらの行に基づいて検索時にテーブルに表示する必要がありますテーブルは1行しか表示されませんが、同じクエリを実行すると2つの行を持つデータベースに表示されます。結果セットオブジェクトを正しく返さなかった可能性があります。誰でもデータベースからすべてのレコードをすべて取得できるようになります。サーブレットを送信する結果セットオブジェクトから複数の行を戻す方法

サーブレット:

WorkAreaClass wa=new WorkAreaClass();    
       ResultSet resultSet = wa.workarea(User);   
       if(resultSet.next()) 
       {     
       table(resultSet,out);    
       } 
+0

いいえ、何とか半分に行の量を削減する 'ResultSet'への参照を返す方法はありません。 – Kayaman

+0

'resultSet.last()'とそれに続く 'resultSet.getRow()'を使ってクエリが返す行数を取得するとします。 –

答えて

2

あなたが結果セットを反復するために開始する前に、あなたはif(resultSet.next())を呼んでいます。その後、最初の行に移動します。次に、while(rs.next())ループを入力すると、カーソルはの2番目の行に移動します。

whileループをdo-whileに変換すると、最初の行はスキップされません。

+0

もちろんです。あなたは基本的なチュートリアルを読んでいない? – Kayaman

0

@kayamanの解決策が正しいとします。

あなたのテーブルは、このようなものでなければなりません。あなたがここにJDBCRowSet https://docs.oracle.com/javase/tutorial/jdbc/basics/jdbcrowset.html を使用する必要が

public int table(ResultSet rs, PrintWriter out)throws Exception 
    { 
     int rowcount=0; 
     out.println("<P ALIGN='center'><TABLE BORDER=1>"); 
     ResultSetMetaData rsmd = rs.getMetaData(); 
     int columnCount = rsmd.getColumnCount(); 
     // table header 
     out.println("<TR>"); 
     for (int i = 0; i < columnCount; i++) { 
       out.println("<TH>" + rsmd.getColumnLabel(i + 1) + "</TH>"); 
     } 
     out.println("</TR>"); 
     // the data 

     do { 
      rowcount++; 
      out.println("<TR>"); 
      for (int i = 0; i < columnCount; i++) {     
        out.println("<TD>" + rs.getString(i + 1) + "</TD>");    
      }   
      out.println("</TR>"); 
     } while(rs.next()); 

     out.println("</TABLE></P>");   
     return rowcount; 
    } 
0

は短いデモです:

Statement stmt = con.createStatement(
      ResultSet.TYPE_SCROLL_SENSITIVE, 
      ResultSet.CONCUR_UPDATABLE); 
ResultSet rs = stmt.executeQuery("select * from COFFEES"); 
JdbcRowSetImpl jdbcRs = new JdbcRowSetImpl(rs); 
関連する問題