- PR -

動的パラメータをJAVAに渡してDBを検索

1
投稿者投稿内容
東横
会議室デビュー日: 2007/02/27
投稿数: 2
投稿日時: 2007-02-27 00:17
会社よりの指令でjava初めて3ヶ月の現COBOLERです。
JSPで画面を入力して入力パラメータをJAVAに渡してDBを読みたいのでがうまく
コーディングができません。
JSPは
@samplekey.jspよりAsample.jspよりBsample.javaを連携します。
----------------------------------------------------
@samplekey.jspは以下に記載
----------------------------------------------------
<%@ page contentType="text/html; charset=Windows-31J" %>
<html>
<head>
<title>キー入力</title>
</head>
<body>
<body scroll="no">
</body>
<h1>キー入力</h1>
<p>検索ボタンをクリックしてください</p>
<form method="post" action="sample.jsp">
<td>品目:</td><input type="text" name="hinmoku" size = 7 maxlength = 2 ><br>
<input type="submit" value="検索">
  </form>
</body>
</html>
---------------------------------------------
Asample.jspは以下に記載
---------------------------------------------
<%@ page import="book.sample" contentType="text/html; charset=Windows-31J" %>
<%= request.getParameter("hinmoku") %>
<%
String hin = request.getParameter("hinmoku");
sample ll = new sample();
String listtable = ll.getTable();
%>
<html>
<head>
<title>一覧</title>
</head>
<body>
<%= listtable %>
</body>
</html>
----------------------------------------------------
Bsample.javaは以下に記載
----------------------------------------------------
package book;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class sample extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html; charset=Windows-31J");
java.io.PrintWriter out = response.getWriter();
request.setCharacterEncoding("Windows-31J");
String hin = request.getParameter("hinmoku");

}
private Statement st;
private ResultSet rs;
private Connection conn;


public LeaseList() {
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("接続します");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sample_mst", "user", "pass");
st = conn.createStatement();
} catch (ClassNotFoundException e) {
System.out.println("ドライバを読み込めませんでした "+e);
} catch (SQLException e) {
System.out.println("データベース接続エラー");
}
}


public String getTable() {
String listtable;
booklisttable = "<table border=3>" +
"<tr>" +
"<th>型番</th>" +
"<th>品目コード</th>" +
"<th>金額</th>" +
"</tr>";

try {
rs = st.executeQuery(
"select table1.kata_no," +
" table1.hin_cd" +
" table1.qty, " +
"from table1 where table1.hin_cd = "+hin);

while(rs.next()) { // 検索された行数分ループ
int kata_no = rs.getInt(1);
String hin_cd = rs.getString(2);
int qty = rs.getInt(3);

listtable = listtable +
"<tr>" +
"<td>"+kata_no+"</td>" +
"<td>"+hin_cd+"</td>" +
"<td>"+qty+"</td>" +
"</tr>";
}
} catch (SQLException e) {}

listtable = listtable + "</table>";
try {
rs.close();
st.close();
conn.close();

} catch (SQLException e) {}
return listtable;
}
}
-------------------------------------------------
こうして品目をJSPより受け取り入力された品目のみSQL文で検索したいのですが、
SQL文のところでコンパイルエラーがおきうまく記述できません。
hinが定義されていませんと。
当記述の場合はBでは
String hin = request.getParameter("hinmoku");をどこに挿入すべきでしょうか?
(Aでの<%= ではうまく表示わたっているのですが・・・。)
いろいろなところに入れてみたのですがなかなかうまくいきません。
どのように記述すればhinに入力されたパラメータがわたりますか?
どなたかご教授願えませんか?
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-02-27 00:29
変数のスコープについて勉強すると幸せになれるかもしれません。

# とりあえずstaticにするという方向で解決したことにされたらどうしよう…。
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2007-02-27 11:12
質問内容と直接は関係ありませんが、COBOL経験者なら、サーブレットより
EL式+Beanのほうが理解が早いかもしれません。

東横
会議室デビュー日: 2007/02/27
投稿数: 2
投稿日時: 2007-03-01 23:32
変数スコープを学び、同一のメソッドないでしか変数は定義できないことがわかりました。うすうすは感じていましたが。今回はpublic String getTable() のメソッドにこの変数は定義しなければいけないのですかね?そうするとrequest句が無効になります。何かよいサンプルなどはありませんか?JSPより変数を受け取り、DBの条件検索をして検索結果をJSPに返すのが目的です。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-03-02 11:03
引用:

東横さんの書き込み (2007-03-01 23:32) より:
変数スコープを学び、同一のメソッドないでしか変数は定義できないことがわかりました。うすうすは感じていましたが。今回はpublic String getTable() のメソッドにこの変数は定義しなければいけないのですかね?そうするとrequest句が無効になります。何かよいサンプルなどはありませんか?JSPより変数を受け取り、DBの条件検索をして検索結果をJSPに返すのが目的です。



メソッドの設計次第ですね。
該当メソッドに外からパラメータを渡せばよいのではないですか?
メソッドの引数はそのためにあるわけです。

メソッド内での一時変数は閉じたスコープでのみ有効ですが、
引数を外から受け取ることもできれば、returnで値を返すこともできます。
getTable()の引数に検索に必要なパラメータを渡せばどうでしょう?
検索結果をreturnで返してはどうでしょう?
1

スキルアップ/キャリアアップ(JOB@IT)