- - PR -
JSPでSQL実行結果を受け取る方法
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-11-09 12:02
JAVAの勉強を始めたばかりの初心者です。
よろしくお願いします。 JSPでBeanを使ってデータベースの検索を行いたいと思っています。 以下のようなコードを記述したのですが、resultに結果が返っていないようで、JSPファイルの <% for( int i = 0; i < result.size(); i++) { Hashtable hash = (Hashtable)result.get(i); %> のところでエラーが出ます。 JSPではなく、JAVAのmainから実行するとエラーは出ずに、結果が表示されました。 いろいろ調べてみたのですが解決策が浮かばず、こちらに投稿させていただきました。 解決策があれば、ご教授お願いします。 ------------------------------------------------------------------------- JSPファイル <%@ page language="java" contentType="text/html; charset=Shift_JIS" %> <%@ page import="java.util.Vector,java.util.Hashtable" %> <jsp:useBean id="tablebean" scope="session" class="schemaSearch.TableItiranBean"> <% tablebean.logic(); %> </jsp:useBean> <% Vector result = tablebean.getResult(); %> <html> <body> <table> <% for( int i = 0; i < result.size(); i++) { Hashtable hash = (Hashtable)result.get(i); %> <tr> <td><%= hash.get("TABLE_NAME") %></td> </tr> <% } %> </table> </body> </html> ------------------------------------------------------------------------- TableItiranBean.javaファイル package schemaSearch; import java.util.Vector; public class TableItiranBean { private Vector result; public TableItiranBean(){result = null;} public void logic () { DBInterFace db = new DBInterFace(); db.connect("oracle.jdbc.driver.OracleDriver","jdbc:oracle:thin:@・・・"); String query = "select ・・・"; result = db.doSelect(query); db.close(); } public Vector getResult() { return result; } } ------------------------------------------------------------------------- DBInterFace.javaファイル package schemaSearch; import java.sql.*; import java.util.Vector; import java.util.Hashtable; public class DBInterFace { private Connection mConnection = null; public DBInterFace(){;} public void connect(String driver, String url, String user, String password ) { try { Class.forName(driver); mConnection = DriverManager.getConnection(url, user, password); } catch ( ClassNotFoundException e ) {; } catch ( SQLException e ) {; } } public Vector doSelect(String query) { if ( mConnection == null ){ return null; } try { Statement stmt = mConnection.createStatement(); ResultSet rset = stmt.executeQuery( query ) ; return resultsetVector(rset); } catch ( SQLException e ) {;} return null; } private Vector resultsetVector(ResultSet rset) { if ( mConnection == null ){ return null; } Vector v = new Vector(); try { ResultSetMetaData meta = rset.getMetaData(); int cols = meta.getColumnCount(); while ( rset.next() ) { Hashtable hash = new Hashtable(); for(int i=1; i <= cols; i++) { hash.put(meta.getColumnName(i), rset.getObject(i)); } v.add(hash); } } catch ( Exception e) {;} return v; } public void close() { try { mConnection.close(); }catch (Exception e) {;} } } |
|
投稿日時: 2004-11-09 12:10
どんなエラーがでましたか?
エラー(例外ですよね?)をgoogleなどで調べれば解決策が見えてくると思いますよ。 |
|
投稿日時: 2004-11-09 12:36
以下のようなエラーがでます。
コンパイラエラーということなのですが、どこを直していいのかがわからないんです。 ご教授お願いします。 HTTP Status 500 - type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception org.apache.jasper.JasperException: JSPのクラスをコンパイルできません JSPファイル: null の中の行: -1でエラーが発生しました 生成されたサーブレットのエラーです: [javac] Since fork is true, ignoring compiler setting. [javac] Compiling 1 source file [javac] Since fork is true, ignoring compiler setting. [javac] C:\tomcat4.1.24\work\Standalone\localhost\_\followup\TableItiran_jsp.java:61: シンボルを解決できません。 [javac] シンボル: メソッド logic () [javac] 場所 : schemaSearch.TableItiranBean の クラス [javac] tablebean.logic(); [javac] ^ [javac] C:\tomcat4.1.24\work\Standalone\localhost\_\followup\TableItiran_jsp.java:62: シンボルを解決できません。 [javac] シンボル: メソッド getResult () [javac] 場所 : schemaSearch.TableItiranBean の クラス [javac] Vector result = tablebean.getResult(); [javac] ^ [javac] エラー 2 個 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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:432) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:356) at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:430) at org.apache.jsp.furiwake_jsp._jspService(furiwake_jsp.java:55) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210) 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.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:2415) 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:172) 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:223) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619) at java.lang.Thread.run(Thread.java:536) |
|
投稿日時: 2004-11-09 12:40
慣れないとエラーのどこを見ればよいのかわかりませんが、この場合「シンボルを解決できません。」というのが重要なヒントになります。
調べてみてください。 |
|
投稿日時: 2004-11-09 13:47
返信、ありがとうございます。
もう一度見直したところ、コンパイルエラーはでなくなりました。 ただ、別のエラーが出るようになりました。 JSPがコンパイルされるときに作成されるJAVAファイルなども見てみたのですが、 解決策が出ませんでした。 なにか方法があれば、ご教授お願いいたします。 エラー内容: HTTP Status 500 - -------------------------------------------------------------------------------- type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception org.apache.jasper.JasperException: schemaSearch.TableItiranBean.logic()V at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254) 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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:432) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:356) at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:430) at org.apache.jsp.furiwake_jsp._jspService(furiwake_jsp.java:55) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210) 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.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:2415) 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:172) 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:223) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619) at java.lang.Thread.run(Thread.java:536) root cause javax.servlet.ServletException: schemaSearch.TableItiranBean.logic()V at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:536) at org.apache.jsp.TableItiran_jsp._jspService(TableItiran_jsp.java:96) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210) 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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:432) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:356) at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:430) at org.apache.jsp.furiwake_jsp._jspService(furiwake_jsp.java:55) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210) 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.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:2415) 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:172) 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:223) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619) at java.lang.Thread.run(Thread.java:536) -------------------------------------------------------------------------------- Apache Tomcat/4.1.24 |
|
投稿日時: 2004-11-09 14:03
Tomcat は ServletException の根本原因のスタックトレースを表示してくれないみたいですね。
JSP 内で発生している例外、またはエラーをキャッチして printStacktrace() することでどこのラインで問題が起きているかつかむことができますよ。 |
|
投稿日時: 2004-11-09 14:04
DBInterFace#connect()か#doSelect()内部で、何か例外が発生しています。
ところが、このメソッドでは例外発生時に何もせずに握りつぶしてしまっている ("catch(XXXException e){;}"のところ)ので、何がおきているのかわかり ません。 例外処理について調査して下さい。 |
|
投稿日時: 2004-11-09 14:07
まずあちこちで例外を握りつぶしているところを改めて、きちんと処理するようにしてください。
不具合を確認するのはそれからでいいでしょう。 |