• 締切済み

JSPでDBからデータ読み込みブラウザーで10件ずつ表示させたい。

JSPでDBからデータを表示させる事ができました、これをブラウザーで10件ずつ表示させ、次へ→、←戻る又はページ数表示で移動させたいのですが、PHPとかでは あったのですがJAVA初心者にはわかりません。 誰か教えてください、お願いします。 <%@page import="java.sql.*,MyDatabase.MyDBAccess" contentType="text/html;charset=Shift_JIS"%> <% String sel=request.getParameter("sel"); sel=new String(sel.getBytes("8859_1"),"Shift_JIS");//selectしたカテゴリーname MyDBAccess db =new MyDBAccess(); db.open(); //String str; //str=sel; ResultSet rs = db.getResultSet("select * from "+sel+""); String tableHTML ="<table border=1>"; tableHTML +="<tr bgcolor=\"#ff9933\">" +"<td><font color=\"white\">商品ID</font></td>" +"<td><font color=\"white\">画像</font></td>" +"<td><font color=\"white\">商品名</font></td>" +"<td><font color=\"white\">数量</font></td>" +"<td><font color=\"white\">タイトル</font></td>" +"<td><font color=\"white\">価格</font></td>" +"<td><font color=\"white\">説明</font></td>"; int n=0; while(rs.next()){ //int id=rs.getInt("id"); String id=rs.getString("id"); String name=rs.getString("name"); String sum=rs.getString("sum"); String price=rs.getString("price"); String title=rs.getString("title"); String detail=rs.getString("detail"); String ima=rs.getString("imagelink"); //ima=new String(ima.getBytes("8859_1"),"Shift_JIS"); String imag=("../image/"+ima); tableHTML +="<tr><td align=\"right\">"+id+"</td>" +"<td><img src="+imag+" whdth=\"120\" height=\"60\"></td>" +"<td>"+name+"</td>" +"<td>"+sum+"</td>" +"<td>"+title+"</td>" +"<td>"+price+"</td>" +"<td>"+detail+"</td></tr>"; n++; } tableHTML +="</table>"; db.close(); %> <html> <head> <title>商品在庫情報</title> </head> <body> <h1><%= sel %>の在庫一覧</h1> <%=tableHTML %> </body> </html>

みんなの回答

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.3

MySQLですとこうなると思います。 <%@ page contentType="text/html;charset=Shift_JIS" %> <%@ page import="java.sql.*" %> <% try { int I=0; int k=0; String jj="1"; if(session.getAttribute("NO")==null){ jj="0" ; }else{ jj=(String)session.getAttribute("NO"); } I=Integer.parseInt(jj); if(request.getParameter("ID")==null){ I=0; }else if(request.getParameter("ID").equals("FRONT")){ I=I+10; }else if(request.getParameter("ID").equals("BACK")){ I=I-10; } String row=Integer.toString(I); String row2=Integer.toString(I+10); session.setAttribute("NO",row); // ドライバクラスをロード // Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // ODBCの場合 Class.forName("org.gjt.mm.mysql.Driver"); // MySQLの場合 // データベースへ接続 // Connection con = // DriverManager.getConnection("jdbc:odbc:helloworld"); // ODBCの場合 // MySQLの場合 String url = "jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=SJIS"; Connection con = DriverManager.getConnection(url,"user","pass"); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); String sql = "SELECT a,bFROM test ORDER BY a ASC LIMIT "+row+","+row2; // クエリーを実行して結果セットを取得 ResultSet rs = stmt.executeQuery(sql); // 検索された行数分ループ while(rs.next()){ // NOを取得 String no = rs.getString("a"); // 言語を取得 String lang = rs.getString("b"); // メッセージを取得 // String msg = rs.getString("MESSAGE"); // 表示 %> <%= no + " " + lang %><br> <% } // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } %> <html> <body>確認OK <hr> <form action="testMySQL30.jsp" method="post" > <br> <input type="submit" value="FRONT" name="ID"> <input type="submit" value="BACK" name="ID"> </form> <hr> </body> </html>

haru-taka
質問者

お礼

ありがとうございました。 やっと完成しました、同じ内容でも色々ソースがある事をかなり勉強させて頂きました。

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.2

DBがORACLEの場合 ROWNUMを使えばできると思います。 POSTGRESの場合はLIMIT OFFSETになるでしょう。 以下ソースコードです。 <%@ page contentType="text/html;charset=Shift_JIS" %> <%@ page import="java.sql.*" %> <% int I=1; int k=0; String jj="1"; if(session.getAttribute("NO")==null){ jj="1" ; }else{ jj=(String)session.getAttribute("NO"); } I=Integer.parseInt(jj); if(request.getParameter("ID")==null){ I=1; }else if(request.getParameter("ID").equals("FRONT")){ I=I+10; }else if(request.getParameter("ID").equals("BACK")){ I=I-10; } %> <%= I %> <% String ii=Integer.toString(I); session.setAttribute("NO",ii); // ログインに必要な情報 String user = "user"; // ユーザ名 String pass = "pass"; // パスワード String database = "XE"; // データベース String server = "127.0.0.1"; out.println ("Connecting..."+"<br>"); // 接続およびSQL実行 try { // ドライバクラスをロード Class.forName("oracle.jdbc.driver.OracleDriver"); // データベースへ接続 Connection con = DriverManager.getConnection ("jdbc:oracle:thin:@"+server+ ":1521:"+database ,user ,pass); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); // クエリーを実行して結果セットを取得 int I2=I+10; String sql = "select employee_id,first_name,last_name,email from (select rownum m,employee_id,first_name,last_name,email from hr.employees)"; sql=sql+"where m >='"+I+"' and m < '"+I2+"'"; ResultSet rs = stmt.executeQuery(sql); // 表示 while (rs.next()) { %> <%= rs.getInt("employee_id") + " " + rs.getString("first_name") + " "+ rs.getString("last_name") + " " + rs.getString("email") %><br> <% } // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } %> <html> <body>確認OK <hr> <form action="testOracleXE3.jsp" method="post" > <!--自分にpostしている--> <br> <input type="submit" value="FRONT" name="ID"> <input type="submit" value="BACK" name="ID"> </form> <hr> </body> </html>

haru-taka
質問者

お礼

本当にありがとうございます。ソースまで記入いただき目からうろこです。 考え方の基本が良くわかりました。DBはMysqlですが出来そうです。 後ほど結果報告させて頂きます。

回答No.1

次へ、戻るに自身のリンクと引数(カウンタ)を用意して、リンクを押す→出力範囲を計算→範囲分(SQLで指定)のDB処理→表示(カウンタを更新)→リンクを押す→・・・・・・・・・ などすれば、できると思います。

haru-taka
質問者

お礼

アドバイスありがとうございます、参考書で調べてやってみます、 かなり初心者なので時間が掛かると思いますが、結果報告させて頂きます。

関連するQ&A