プロが教える店舗&オフィスのセキュリティ対策術

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>

A 回答 (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>
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/15 17:55

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>
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/13 19:28

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


などすれば、できると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/10 23:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています