2012-04-24 9 views
0

jspページの本文部分に次のJavaコードを挿入して、Oracle 10gデータベースからテーブルFLIGHTDATAのレコードを取得しました。しかし、Class.forName(...)行の実行後、プログラムは直接データを返さずに接続をブロックして終了します。私が間違っていることに関する提案はありますか?おかげで - SomnathJSPを使用してOracle 10g DBから返されたデータレコードがありません

<%@ page import="java.sql.*" %> 
<%@ page import="java.io.*" %> 

<% 
out.println("<table border='1'><tr>"); 
Connection connection = null; 
Statement statement = null; 
ResultSet rs_1hop = null; 
ResultSetMetaData rsm_1hop = null; 
try { 
Class.forName("oracle.jdbc.driver.OracleDriver"); 
String connectionURL = "jdbc:oracle:thin:@localhost:1521:xe"; 
connection = DriverManager.getConnection(connectionURL, "system", "system"); 
statement = connection.createStatement(); 
// sql query to retrieve values from the secified table. 
String QueryString = "SELECT * from FLIGHTDATA"; 
rs_1hop = statement.executeQuery(QueryString); 
rsm_1hop = rs_1hop.getMetaData(); 
int colCnt = rsm_1hop.getColumnCount(); 

for (int i=1; i<=colCnt; ++i) { 
    out.println("<th>" + rsm_1hop.getColumnName(i) + "</th>"); 
} 
out.println("</tr>"); 

while (rs_1hop.next()) { 
    out.println("<tr>"); 
    for (int i=1; i<=colCnt; ++i) 
     out.println("<td>" + rs_1hop.getString(i) + "</td>"); 
    out.println("</tr>"); 
} 

} catch (Exception e) { 

} finally { 
    if (statement != null) 
     statement.close(); 
    if (connection != null) 
     connection.close(); 
} 
out.println("</table><br><br>"); 
%> 

BalusCによってコメントとしてcatchブロックでServletExceptionがを追加すること、および/ WEB-INF/libの下odbc6.jarファイルを追加した後、私は私が原因であると仮定し、次のエラーメッセージを取得していますjdbcドライバが見つかりません。

Apache Tomcatのインストールディレクトリ/ ROOT/web-apps/WEB_INF/libにjarファイルを追加して、すべてのWebアプリケーションで使用できるようにしましたが、問題は解決しません。

description The server encountered an internal error() that prevented it from fulfilling this request. 

exception 

org.apache.jasper.JasperException: javax.servlet.ServletException: DB interaction failed!   org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:500) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:410) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

根本原因

javax.servlet.ServletException: DB interaction failed! 
    org.apache.jsp.retrievePossibleRoutes_jsp._jspService(retrievePossibleRoutes_jsp.java:96) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

根本原因

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680) 
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) 
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128) 
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66) 
    java.lang.Class.forName0(Native Method) 
    java.lang.Class.forName(Unknown Source) 
    org.apache.jsp.retrievePossibleRoutes_jsp._jspService(retrievePossibleRoutes_jsp.java:73) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

答えて

3

しかし、Class.forNameの(...)の実行後のプログラムは、直接、最終的にブロックするようになり、ライン

これは、ClassNotFoundExceptionがスローされた場合にのみ発生します。つまり、指定されたクラス名で指定された具象クラスは、Webアプリケーションのランタイムクラスパスにはまったく含まれていません。そのクラスはOracle JDBCドライバの一部です。 Oracle JDBCドライバのJARファイルをwebappの/WEB-INF/libフォルダに置くと、その問題が解決されます。

さらに、の何かをその空のcatch (Exception e) {}ブロックに入れて、例外が発生したことを示すことを強くお勧めします。今、あなたは本当に何が起こったかについて、暗闇の中で周囲のことを突き止めています。 ServletExceptionとして再スローした場合、半分のJSP結果ではなく、はるかに自明のエラーページが表示されます。

} catch (Exception e) { 
    throw new ServletException(e);  
} 

最後に、JavaコードをJSPファイルに書き込むことは、bad practiceです。これを正しく救済するには、この回答を確認してください:Show JDBC ResultSet in HTML in JSP page using MVC and DAO pattern


更新あなたの更新ごとのように:

BalusCによってコメントとしてcatchブロックでServletExceptionがを追加すること、および/ WEB-INF/libの下odbc6.jarファイルを追加した後、 jdbcドライバが見つからないため、次のようなエラーメッセージが表示されます。

が、それは間違ったJARファイルです(すなわち、それはoracle.jdbc.driver.OracleDriverクラスを含む1ではありません)、またはあなたが/再デプロイ/が正常にWebアプリケーションを再起動して再構築しませんでした。 hereと記載されているOracleデータベース・バージョン用の適切なJDBCドライバをダウンロードしていることを確認してください。 Webアプリケーションを適切に再構築/再展開/再起動したことを確認してください。


私はまた、彼らはすべてのWebアプリケーションのために用意されていますが、問題が解決しないように、Apache Tomcatのインストールディレクトリ/ ROOT/WEB-アプリケーション/ WEB_INF/libの下にjarファイルを追加してみました。

これはナンセンスです。この変更を元に戻します。展開されたすべてのWebアプリケーションでJARを利用できるようにするには、Tomcat独自の/libフォルダ(Tomcatのインストールフォルダのまっすぐなフォルダ)に配置します。しかし、間違ったJARファイルであれば、それはあなたの問題を解決しません。

+0

こんにちは、私はすでにプロジェクトビルドパスのライブラリタブの下にojdbc6.jarを追加しました。十分ではありませんか? – somnathchakrabarti

+1

いいえ。ビルドされたWARの最終的に '/ WEB-INF/lib'フォルダにJARファイルが入るように、プロジェクトのプロパティの* Deployment Assembly *セクションで設定する必要があります。しかし、それは普通の不器用です。物理JARファイルをプロジェクトの '/ WEB-INF/lib'フォルダに手動でドロップするだけです。それ以前に行った変更をビルドパスに元に戻すことを忘れないでください。これらの変更は不要で、両者を矛盾させる可能性があります。プロジェクトの '/ WEB-INF/lib'フォルダにJARファイルをドロップするだけで、IDEは自動的に適切なビルドパス設定に注意します。 – BalusC

+0

はい、私はプロジェクトビルドパス - >ライブラリからファイルを削除し、/WebContent/WEB-INF/libの下に/web-apps/ROOT/WEB-INF/libをすべてのWebアプリケーションで使用できるようにします。しかし、問題は引き続き、ServletExceptionがcatchブロックに追加されたためにスローされた詳細なエラーメッセージが残っています。 – somnathchakrabarti

関連する問題