- - PR -
JDBCによるデータベースからの検索
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-09-23 14:41
ぷりんです。
JSPを勉強しているものです。 セレクト画面での選んだキーワードによるデータベース からの検索をしようとしています。 HTML上でのselect画面からのデータベース検索はできました。 以下のようなもので成功しました。 <select name="key" > <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> そのselectの部分を直接書くのではなく, データベースから呼び出したいのですが・・。 javaBeanを使うところで手間取っています。 ご教授お願いいたします。 以下がプログラムです。 <%@ page contentType="text/html; charset=Shift_JIS" import="java.sql.*,jutyu.kaisyamei" %> <jsp:useBean id="kaisyamei" scope="request" class="jutyu.kaisyamei" /> <% //データベース設定 String sv = "localhost"; //サーバ名 String db = "recycle"; //データベース名 String user = ""; //ユーザ名 String pass = ""; //パスワード String encode = "Shift_JIS"; //文字コード //データベースに接続する Class.forName("org.gjt.mm.mysql.Driver"); String url = "jdbc:mysql://" + sv + "/" + db + "?user=" + user + "&password=" + pass + "&useUnicode=true&characterEncoding=" + encode; Connection conn = DriverManager.getConnection(url); //データを取得する kaisyamei.executeQuery(conn); %> <html> <head> <title>データを検索する</title> </head> <body> //SQLを組み立てる if (request.getMethod().equals("POST")) { key= cnvString(request.getParameter("key")); //キーワードが入力されたときはデータを絞り込む if (key.equals("") == false) { sql += " WHERE id = '" + key + "'"; } } <FORM name="MyForm"> <SELECT NAME="MySt" onChange="onChange()"> <OPTION VALUE=0>選択してください <%=kaisyamei.getOptions() %> </SELECT> <INPUT name="MyText1"> </FORM> <SCRIPT LANGUAGE="JavaScript"> <!-- function onChange () { data=new Array( new Array('name') <%=kaisyamei.getArrays() %> ); KOUMOKU = data[document.MyForm.MySt.selectedIndex]; document.MyForm.MyText1.value=KOUMOKU[1]; } //--> </SCRIPT> <% //取り出したデータを表示する out.println("<table border=\"1\">"); out.println("<tr>"); out.println("<td>ID</td>"); out.println("<td>名前</td>"); out.println("</tr>"); while (rs.next()) { out.println("<tr>"); out.println("<td>" + rs.getInt("id") + "</td>"); out.println("<td>" + rs.getString("name") + "</td>"); out.println("</tr>"); } out.println("</table>"); //データベース接続を閉じる conn.close(); %> </body> </html> エラーは, while (rs.next()) { ^ out.println("<td>" + rs.getInt("id") + "</td>"); out.println("<td>" + rs.getString("name") + "</td>"); とうので,rs のところにでてきます。 | ||||
|
投稿日時: 2004-09-23 14:52
rs が定義されてないだけでは?
また、kaisyamei が何物かわかりませんが、executeQuery の後で sql を 組み立てているのはよいのですか? どういったエラーが出たのかも書いたほうがよいですよ。 | ||||
|
投稿日時: 2004-09-23 14:55
ボアさん。早速のお返事ありがとうございまs。
一つめです。 kaisyameiというのは,javaファイルです。 以下のようなプログラムです。 package jutyu; import java.io.Serializable; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.SQLException; import java.util.ArrayList; public class kaisyamei implements Serializable { private ArrayList array; public void executeQuery(Connection conn) throws SQLException { Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM buhinmei"); array = new ArrayList(); while (rs.next()) { array.add( new String[] { rs.getString("id"), rs.getString("name")}); } rs.close(); stmt.close(); } public String getArrays() { StringBuffer ret = new StringBuffer(); for (int i = 0; i < array.size(); i++) { String[] current = (String[]) array.get(i); ret .append(",new Array('") .append(current[0]) .append("','") .append(current[1]) .append("')"); } return ret.toString(); } public String getOptions() { StringBuffer ret = new StringBuffer(); for (int i = 0; i < array.size(); i++) { String[] current = (String[]) array.get(i); ret .append("<OPTION VALUE=") .append(i+1) .append(">") .append(current[0]) .append("</OPTION>"); } return ret.toString(); } } | ||||
|
投稿日時: 2004-09-23 14:56
二つ目です。
エラー内容な org.apache.jasper.JasperException: JSPのクラスをコンパイルできません JSPファイル: /jsp/shisaku/s1.jsp の中の行: 60でエラーが発生しました 生成されたサーブレットのエラーです: [javac] Compiling 1 source file C:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\examples\jsp\shisaku\s1_jsp.java:103: シンボルを解決できません。 シンボル: 変数 rs 場所 : org.apache.jsp.s1_jsp の クラス while (rs.next()) { ^ JSPファイル: /jsp/shisaku/s1.jsp の中の行: 60でエラーが発生しました 生成されたサーブレットのエラーです: C:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\examples\jsp\shisaku\s1_jsp.java:105: シンボルを解決できません。 シンボル: 変数 rs 場所 : org.apache.jsp.s1_jsp の クラス out.println("<td>" + rs.getInt("id") + "</td>"); ^ JSPファイル: /jsp/shisaku/s1.jsp の中の行: 60でエラーが発生しました 生成されたサーブレットのエラーです: C:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\examples\jsp\shisaku\s1_jsp.java:106: シンボルを解決できません。 シンボル: 変数 rs 場所 : org.apache.jsp.s1_jsp の クラス out.println("<td>" + rs.getString("name") + "</td>"); ^ エラー 3 個 at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:130) at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:293) at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:353) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:370) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:473) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:190) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2422) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:163) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:199) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:324) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:395) at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:673) at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:615) at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:786) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Thread.java:534) | ||||
|
投稿日時: 2004-09-23 15:31
このエラーの意味はわかりますか? 念の為説明すると、単なる構文誤りによるコンパイルエラーです。 rsと言う変数が宣言されていないか、宣言されていてもスコープ外に なっていると言う意味です。 rsを宣言しているところと、使用しているとこをが適切かをチェックすれば 原因がわかると思います。 あと、コードを貼り付けるときは[code]〜[/code]で囲ってくださいね。 | ||||
|
投稿日時: 2004-09-23 15:35
「シンボルを解決できません。」そのまんまですね。
が、そもそもここで ResultSet を参照することからして違うような。 処理の流れを追ってみたほうがよいですよ。 | ||||
|
投稿日時: 2004-09-23 15:38
YOU@ITさん。お返事ありがとうございます。
rsが宣言されていませんでした(><) rsをいれたところもっとエラーが増えてしまいました・・・。 構文そのものを理解してないようです(><) cordeすいませんでした。 どういうふうに検索をしたらよいのでしょうか・・。 初心者ながら、身分に合わない課題が降りかかって, 対応に困っております。 | ||||
|
投稿日時: 2004-09-24 11:02
Java、データベースアクセス、HTMLなどについての基本的な知識なしにプログラムを組もうと
されている、という印象を受けます。正直言って、掲示板に頼るのは無理があるでしょう。 まずは「課題を投げた人」から時間的な猶予をもらって、基本的なところを勉強した上で、 不明な点を掲示板で聞くようにしたらどうでしょうか。また、周囲に質問できる人はいない のでしょうか? 掲示板よりはよっぽど素早い回答が返ってくると思いますが。 もし時間の猶予ももらえない、周りに聞く人もいない、ということであれば、まず時間内に 解決するのは無理だ、ということを伝えて対応を考えてもらう必要があるでしょう。 |