AIと戦って、あなたの人生のリスク診断 >>

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>

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QjavaでDBから取得したデータのJSP表示

JAVAでDBから取得し
ArrayList shikakuCdList = shikakuCd_Data();
request.setAttribute("shikakuCdList", shikakuCdList);

JSPでコンボボックスに表示しようと思います
<% ArrayList bumonlist = (ArrayList)request.getAttribute("bumonCdList");%>


<% for ( int i = 0; i < bumonlist.size(); i++ ){%>
<option value=" (1)ここの記述方法も  "></option>
<% }%>

という記述にしていますが、うまく動きません。
よろしくお願いします。

Aベストアンサー

><% for ( int i = 0; i < bumonlist.size(); i++ ){%>
><option value=" (1)ここの記述方法も  "></option>
><% }%>
この部分ですが、

もし、shikakuCd_Data()の返すArrayListの中身が
JavaBean(下記はTestBean)であれば、

<% for ( int i = 0; i < bumonlist.size(); i++ ){%>
<% TestBean test = (TestBean)bumonlist.get(i); %>
<option value="<%= test.ゲッター %>"></option>
<% }%>

もしくは、useBeanアクションをつかい、
coreライブラリのforEachタグを使って出力する方法もあります。
こちらの方法がお勧めですが。

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

QJSPでリンクを利用してパラメータを次画面に渡す方法について。

一覧表示されているデータのNOをクリックすると、二つのパラメータでデータベースへアクセスし、該当データの詳細画面に遷移する、というプログラムを作っています。

データベースへアクセスする際に必要なIDは2つで、仮にID_A、ID_Bとします。
リンク部分のソースは

---------------------------------------------------------------------
<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>">番号</a>
<input type="hidden" name="ID_B" value="<%= rs.getString("ID_Bcat_id") %>">
---------------------------------------------------------------------

としておりますが、次画面へ遷移すると、ID_Bの値はnullとなってしまうために、正常にデータの取得ができません。

二つのパラメータを使用する場合のパラメータを渡す方法を教えて頂きたいと思います。よろしくお願いします。

一覧表示されているデータのNOをクリックすると、二つのパラメータでデータベースへアクセスし、該当データの詳細画面に遷移する、というプログラムを作っています。

データベースへアクセスする際に必要なIDは2つで、仮にID_A、ID_Bとします。
リンク部分のソースは

---------------------------------------------------------------------
<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>">番号</a>
<input type="hidden" name="ID_B" value="<%= rs.getString("ID_Bcat_id") %>">...続きを読む

Aベストアンサー

<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>&ID_B=<%= rs.getString("ID_Bcat_id") %>">番号</a>

としてID_Bを&で繋げればMethod="get"で送れますね。
inputタグで送る場合はformタグでactionアトリビュートに飛ぶjspを指定してsubmitボタンかJavaScriptでsubmitさせなければならないと思います。

QJSPでデータ一覧表示

JSP+Bean+Servletで作っています。

BeanでDB接続、データを取得して、
それをJSPで一覧表示として表示させたいのですが、
どのタグを使えばいいのでしょうか。
また、その場合、タグは、Servletとか
Beanでかく必要がありますか。


たとえば、今、DBに30個データがある場合、
JSPでそれをTABLEタグを使って
一覧表示させますよね。

でもJSP側では、<TR><TD></TD></TR>の
データをいくつセットできるか、っていう
数がきまってますよね。てことは、
ServletとかBeanでHTMLのタグをうって
表示させないといけないんですか???


やりたいことは、BeanとかServletで
タグは書かずに、JSPでパラメータだけ
受け取って、その数だけデータを
表示させたいんです。
(JSPだけでタグをかいて、パラメータで
わたってきたデータを表示させたい。)

そういうことってできますか??
・・・説明がうまく出来てないかとは思うのですが
よろしくお願いします。

JSP+Bean+Servletで作っています。

BeanでDB接続、データを取得して、
それをJSPで一覧表示として表示させたいのですが、
どのタグを使えばいいのでしょうか。
また、その場合、タグは、Servletとか
Beanでかく必要がありますか。


たとえば、今、DBに30個データがある場合、
JSPでそれをTABLEタグを使って
一覧表示させますよね。

でもJSP側では、<TR><TD></TD></TR>の
データをいくつセットできるか、っていう
数がきまってますよね。てことは、
ServletとかBeanでHTMLのタグをうって
表...続きを読む

Aベストアンサー

どもども^^

例えば、JSPが受け取ったデータ(Stringの配列やら、HashTableやら)を
ループを使って表示させればいいのでは??

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<table>
<%
for(int i=0; i < 結果.length; i++){
%>
<tr>
<td><%= 結果[i] %></td>
</tr>
<%
}
%>
</table>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

こんな感じでHTMLのタグをJAVAのforループの中にほりこんで
やれば、出来ると思うけど、だめ??

がんばってください。
わかりにくい説明だったら、ごめんね。

Qフォーム上で押されたボタンによってサーブレットの処理を変えたい

Urizakaです。
さて、さっそく質問です。
JSPの同一フォーム上に「登録」「修正」「削除」のボタンを置き、その押された
ボタンによってサーブレット内での処理が切り替わる(具体的には、違う
SQL文を実行し、違うJSPページをgetRequestDispatcherメソッドで生成
する)ようにしたいのですが、どのようにすればよいのでしょうか?
もちろんそれぞれの処理に対して別々のサーブレットを作り、javaScript
でそれぞれのサーブレットへ飛ぶように制御するという処理も考えたことは
考えたのですが、できれば一つのサーブレットで済ませたいと考えたもので
…宜しくお願いします。

Aベストアンサー

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=MySubmit>
</form>

<script language="JavaScript">
function func(MyCommand){
document.MyForm.MySubmit.value=MyCommand;
document.MyForm.submit();
}
</script>

■Servletでの処理
// リクエストの取得
String MyAction = req.getParameter("MySubmit");

// 処理の実行
if (MyAction.equals("Toroku")){...}
if (MyAction.equals("Shusei")){...}
if (MyAction.equals("Sakujo")){...}



---------------------------------------------------

こんな感じでどうでしょうか。
ちなみにこうやって書いておくと、フォームのボタンからじゃなくても
アンカーをクリックすることで同じ効果が出せそうな……

<a href="JavaScript:func('Toroku')">登録</a>

あ、でもまたボロが出そうなのでこの辺で(^_^;)

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=M...続きを読む

QJSPで