実現したいこと
JSPからDBにアクセスし、その結果をブラウザにリスト表示させる。
###現段階で出来ていること
EclipseでJavaを書き、DBで作ったテーブルから
内容を持ってきて表示させることはできました。
JAVA
1import java.sql.Connection; 2import java.sql.DriverManager; 3import java.sql.ResultSet; 4import java.sql.ResultSetMetaData; 5import java.sql.Statement; 6import java.util.ArrayList; 7import java.util.List; 8 9public class Main { 10 11 public static void main(String[] args) throws Exception { 12 Connection connection = null; 13 Statement statement = null; 14 ResultSet resultSet = null; 15 16 try { 17 //----------------- 18 // 接続 19 //----------------- 20 connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/testdb", // "jdbc:postgresql://[場所(Domain)]:[ポート番号]/[DB名]" 21 "postgres", // ログインロール 22 "takahashi"); // パスワード 23 statement = connection.createStatement(); 24 25 //----------------- 26 // SQLの発行 27 //----------------- 28 //ユーザー情報のテーブル 29 resultSet = statement.executeQuery("SELECT * FROM member"); 30 31 //----------------- 32 // 値の取得 33 //----------------- 34 // フィールド一覧を取得 35 List<String> fields = new ArrayList<String>(); 36 ResultSetMetaData rsmd = resultSet.getMetaData(); 37 for (int i = 1; i <= rsmd.getColumnCount(); i++) { 38 fields.add(rsmd.getColumnName(i)); 39 } 40 41 //結果の出力 42 int rowCount = 0; 43 while (resultSet.next()) { 44 rowCount++; 45 46 System.out.println("---------------------------------------------------"); 47 System.out.println("--- Rows:" + rowCount); 48 System.out.println("---------------------------------------------------"); 49 50 //値は、「resultSet.getString(<フィールド名>)」で取得する。 51 for (String field : fields) { 52 System.out.println(field + ":" + resultSet.getString(field)); 53 } 54 } 55 56 57 } finally { 58 //接続を切断する 59 if (resultSet != null) { 60 resultSet.close(); 61 } 62 if (statement != null) { 63 statement.close(); 64 } 65 if (connection != null) { 66 connection.close(); 67 } 68 } 69 } 70 71}
続いてこちらのサイトを参考に、まず上記のMain.javaをコンパイルし
次も同様に参考にしたソースコードに少し手を加えて
以下のようなJSPファイルを作り保存しました。
JSP
1<%@ page import="java.sql.* atmarkit.Main" 2 contentType="text/html; charset=euc-jp" %> 3<% 4// 内容: データベースにアクセスする 5 6// Main のインスタンスを生成する 7Main db = new Main(); 8 9// データベースへのアクセス 10db.open(); 11 12// メンバーを取得 13ResultSet rs = db.getResultSet("select * from member"); 14 15// メンバー一覧表示用のテーブル 16String tableHTML = "<table border=1>"; 17tableHTML += "<tr bgcolor=\"000080\"><td><font color=\"white\">メンバーID</font></td>" 18 + "<td><font color=\"white\">名前</font></td>" 19 + "<td><font color=\"white\">カナ</font></td>"; 20 21// 取得された各結果に対しての処理 22while(rs.next()) { 23 24 int id = rs.getInt("member_id"); // メンバーIDを取得 25 String name = rs.getString("name"); // メンバー名を取得 26 String kana = rs.getString("kana"); // メンバー名(カナ)を取得 27 28 // 文字コードを EUC_JP からUnicode へ変換 29 name = new String(name.getBytes("8859_1"), "EUC_JP"); 30 kana = new String(kana.getBytes("8859_1"), "EUC_JP"); 31 32 // テーブル用HTMLを作成 33 tableHTML += "<tr><td align=\"right\">" + id + "</td>" 34 + "<td>" + name + "</td><td>" + kana + "</td></tr>"; 35} 36 37tableHTML += "</table>"; 38 39// データベースへのコネクションを閉じる 40db.close(); 41 42%> 43<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 44<html> 45<head><title>データベースへのアクセス</title></head> 46<body> 47<p>-- データベースへのアクセス --</p> 48<p> 49<b>メンバーの一覧</b><br> 50<%= tableHTML %> 51</p> 52</body> 53</html>
そして保存したファイルにhttp://localhost:8080/examples/10-1.jspといった感じで
アクセスすると下記のようなエラーが表示されました。
The method open() is undefined for the type等で検索をしてみましたが
参考になりそうなサイトは見つかりませんでした。
###エラー内容
Error
1HTTPステータス 500 – Internal Server Error 2タイプ 例外報告 3 4メッセージ JSPのクラスをコンパイルできません: 5 6説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 7 8例外 9 10org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: 11 12JSPファイル: [/10-1.jsp] の中の[10]行目でエラーが発生しました 13The method open() is undefined for the type Main 147: Main db = new Main(); 158: 169: // データベースへのアクセス 1710: db.open(); 1811: 1912: // メンバーを取得 2013: ResultSet rs = db.getResultSet("select * from member"); 21 22 23JSPファイル: [/10-1.jsp] の中の[13]行目でエラーが発生しました 24The method getResultSet(String) is undefined for the type Main 2510: db.open(); 2611: 2712: // メンバーを取得 2813: ResultSet rs = db.getResultSet("select * from member"); 2914: 3015: // メンバー一覧表示用のテーブル 3116: String tableHTML = "<table border=1>"; 32 33 34JSPファイル: [/10-1.jsp] の中の[40]行目でエラーが発生しました 35The method close() is undefined for the type Main 3637: tableHTML += "</table>"; 3738: 3839: // データベースへのコネクションを閉じる 3940: db.close(); 4041: 4142: %> 4243: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 43 44 45Stacktrace: 46 org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103) 47 org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:213) 48 org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:473) 49 org.apache.jasper.compiler.Compiler.compile(Compiler.java:392) 50 org.apache.jasper.compiler.Compiler.compile(Compiler.java:362) 51 org.apache.jasper.compiler.Compiler.compile(Compiler.java:346) 52 org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603) 53 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:399) 54 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) 55 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) 56 javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 57 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 58
不足内容等あればご指摘ください。
ご教授のほどよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー