★★ Java の宿題ここで答えます Part 68 ★★ 色々いじったソースの現在のenshu5Bean.java:46は何書いてあるの? どうみてもstmtっぽいけど。
953 :
デフォルトの名無しさん :2010/03/03(水) 17:27:26
一度JSPの <%bean.open(); %> を消して、 enshu5Bean のexcecuteQueryを↓にしてみて public ResultSet executeQuery(String sql) throws Exception { // ドライバクラスをロード Class.forName("org.postgresql.Driver"); // データベースへ接続 Connection con = DriverManager.getConnection( "jdbc:postgresql:hellodb", //接続文字列 "postgres", //ユーザID "0810"); //パスワード // ステートメントオブジェクトを生成 stmt = con.createStatement(); return stmt.executeQuery(sql); }
>>952 現在
>>953 のプログラムになってしまっていますが、
先程までの段階では、
public ResultSet executeQuery(String sql) throws Exception {
→46 ResultSet rs = null;
try {
rs = stmt.executeQuery(sql);
}catch(Exception e) {
e.printStackTrace();
}
return rs;
}
でした。
>>953 変更して実行してみましたが、
例外
org.apache.jasper.JasperException: An exception occurred processing JSP page /jsp/enshu5.jsp at line 24
21: <input type="submit" value="選択">
22: </form>
23: <%String sql = "select current_timestamp;";%>
24: <%ResultSet rs = bean.executeQuery(sql);%>
25: <table border="1">
26: <tr><td>学籍番号</td><td>名前</td><td>入学年度</td><td>性別</td></tr>
27:
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
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.NullPointerException enshu5.enshu5Bean.executeQuery(enshu5Bean.java:46) org.apache.jsp.jsp.enshu5_jsp._jspService(enshu5_jsp.java:94) 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:377) 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) 私が書き換えの時にミスをしている可能性がありますので、 もう一度現在のソースをアップロードして見て頂いてもいいですか?
>>958 直接関係ないけど、jspのwhileはいるもんだと思っていいんかね?
エラーこいてる
>>959 失礼しました、whileにコメントアウトが掛かったままでした。
検索した結果を<table>で表にするためのものなので。
ResultSet rsがおかしいなら、とりあえずデータベースの開閉のみ
行ってみようと思って一度それに関するプログラムをコメントアウトしていたんですが、
それが残ったままでした。
>>960 Connectionもthis.conを使わないとだめだな
あぁでもclose()だけか、影響でるの
>>961 stmtもthis.stmtにしているので、とりあえず統一してみました
そもそもデータベースにすら繋がってるかどうかが見えないので、
まだ結果は分かりませんが……。
964 :
デフォルトの名無しさん :2010/03/03(水) 19:37:17
>>963 おれんとこだとそれっぽく動くんだよなぁ。
まだNullPointerExceptionでる?
>>964 あれ?そしたらこっちの環境設定の問題なんですかね……。
ちょっと改変してみたところ、
まずenshu.jspは一度正常に起動して、表やリストボックスが普通に出るんですが、
そのあとフォームの「選択」を押してServletを起動しようとすると
Result cannot be resolved to a type
24: </form>
25: <%String sql="SELECT * FROM 学生名簿;";
26: out.println(sql);%>
27: <%Result rs = bean.executeQuery(sql);%>
28:
29: <table border="1">
30: <tr><td>学籍番号</td><td>名前</td><td>入学年度</td><td>性別</td></tr>
と出ます。
このエラーだとimportの問題になるようなんですが、ResultSetのクラスが
import出来ていないということになるんでしょうか?
965です。 すいません間違えました、ResultではなくResultSetでした。 本当に申し訳ないです。 そして相変わらずNullPointerExceptionになってしまいます。 でもファイルを起動した最初からJSPにはじかれる事は無くなりました。
967 :
デフォルトの名無しさん :2010/03/03(水) 20:22:39
【 課題 】 ○県、市別に男女の人数を集計するプログラムを作成せよ。 千葉県 柏市 男 千葉県 松戸市 男 埼玉県 さいたま市 女 千葉県 柏市 男 埼玉県 越谷市 男 千葉県 松戸市 男 埼玉県 岩槻市 女 千葉県 柏市 女 埼玉県 さいたま市 女 [実行例] 千葉県 柏市:男2人女1人 千葉県 松戸市:男1人0人 埼玉県 さいたま市:男0人女2人 (以下略)… 【 形態 】1. Javaアプリケーション 【 期限 】3/8まで 【 Ver 】java version "1.5.0_05" アルゴリズムに苦戦しています、よろしくお願いします。
968 :
デフォルトの名無しさん :2010/03/03(水) 20:59:47
>>967 C直下にtest.txtで元データを用意して。
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;
public class CityCounter {
public static void main(String[] args) throws Exception {
Map<String, City> m = new HashMap<String, City>();
BufferedReader br = new BufferedReader(new FileReader("c:\\test.txt"));
String str = br.readLine();
while (str != null) {
String city = str.substring(0, str.indexOf("市") + 1).trim();
String sex = str.substring(str.indexOf("市") + 1, str.length()).trim();
if (m.containsKey(city)) m.get(city).add(sex);
else m.put(city, new City(city, sex));
str = br.readLine();
}
for (String city : m.keySet()) System.out.println(m.get(city).toString());
}
}
969 :
デフォルトの名無しさん :2010/03/03(水) 21:00:09
>>968 つづき
class City {
String city;
long man = 0;
long woman = 0;
City(String city, String sex) {
this.city = city;
add(sex);
}
void add(String sex) {
if (sex.equals("男")) man++;
else woman++;
}
public String toString() {
return city + ":男" + man + "人女" + woman + "人";
}
}
970 :
デフォルトの名無しさん :2010/03/03(水) 21:02:42
>>965 最初のjsp表示できる部分では、
DBのデータも表示されるの?
相変わらずのNullPointerExceptionが出てるところは、
まったく同じところ?
>>968-969 こんなに早くありがとうございます!
HashMapの使い方が非常に勉強になりました!
>>970 いや、その時点ではvalueの値がnullなので検索していない=表はそれ以上
表示されないということになります。
なので、DBとの繋がりはそこでは見えません。
全く同じです。ResultSetとexecuteQueryのところでやはり
NullPointerExceptionになってしまいます。
973 :
デフォルトの名無しさん :2010/03/03(水) 21:46:25
とにかく途中でもいいから「出せ」と言われていたのが16時までだったので、 未完成なプログラムのまま提出してきました……。 でも結局分からなければ意味がないというか、後々またこれの発展問題みたいなのは どんどん出てくるんで、出来ればとにかく理解して完成させたいと思っています。 しかし、朝からずっと教えて下さってる方々には本当申し訳ないです……。
>>974 横からだが
JSP関係なく、JUnitなり普通のmain文書くなりして、
普通にJDBCでResultSet取れてくるか確認しましょう。
>>975 凄く単純なJavaのソース(JSPやServlet、Beanなどではない)で、
JDBCに接続してみましたが、SQL文を
SELECT * FROM 学生名簿;
としてResultSetを使ったところ、ちゃんとした結果が返ってきました。
接続のソースは殆どここから持ってきているので、問題は無いと
思ったんですが……。
サーブレットコンテナのWebアプリクラスパスを確認してください。 過去のコンパイル結果が残ったまま実行されているように見えます。 enshu5Beanに行った修正が正しく反映されるか確認しましょう。 例えばexecuteQueryメソッド内で標準出力に文字列を出してみるなど。 テスト用のシンプルな構成でJDBC接続が問題ないのであれば、 おそらく問題はサーブレット実行環境の設定(正しい.classが参照されていない)です。
>>977 サーブレットコンテナのWebアプリクラスパスというのは、
単純に、set CLASSPATH…と設定したCLASSPATHとは別ということでしょうか?
enshu5Beanは、どうもやはりexecuteQuery()が上手く働いていないようなので、
もう一度修正を加えてから結果を見てみたいと思います。
Servletの正しい.classが参照されていないという事は、やはり上で指摘を頂いた
CLASSPATHなどの問題になりますよね……もう一度、CLASSPATHの設定について調べてみます。
979 :
デフォルトの名無しさん :2010/03/04(木) 11:49:09
>>978 もう遅いと思うけどenshu5Beanクラスのopenメソッドの最後の部分以下
// ステートメントオブジェクトを生成
Statement stmt = con.createStatement();
このローカル変数に代入しちゃダメなんじゃない。
本当はフィールド変数のprivate Statement stmt;に代入したいんじゃないの?
executeQueryメソッドで読んでる変数はフィールド変数だからさ。
Statement stmt = con.createStatement();
↓
stmt = con.createStatement();
980 :
979 :2010/03/04(木) 11:55:59
>>979 とりあえずはその部分も変更してみました。有難う御座います。
ですが接続は出来てもResultSetで取得の部分で詰まってる=DBの内容を表示できない……という事で
接続が成功したかも定かでないので、まだ結果をお知らせできないのが申し訳ないです……。
色々ソースを変えてみた結果、今度は
Type mismatch: cannot convert from String to ResultSet
と出るようになってしまったので、とりあえず一から組みなおしてみようと思います。
beanから呼び出すところで足止めされているようにも見えるので、
JSP内でDBを呼び出してみて(あまりいい方法とは言えないと聞きましたが……)、
それで成功するかどうか試してみたいと思います。
>>977 で言って頂いたように、恐らく環境の方で不備もあると思いますので、
その辺りも見直してきます。
982 :
デフォルトの名無しさん :2010/03/04(木) 20:34:05
久々に白熱してんね
984 :
デフォルトの名無しさん :2010/03/05(金) 14:13:18
>>983 さすがにそれはおまいさんがわかんないところを聞いた方が早いぞ
何行目は何をやってるの?って
まるでわからないってのなら口頭で答えられないからあきらめろ
>>984 ほっとけ、こういうカスがIT業界にこられちゃたまらん
986 :
デフォルトの名無しさん :2010/03/05(金) 15:55:14
>>985 このスレはプログラミングなんて興味がなく、
IT業界に行く気もないやつが
宿題を丸投げするスレかと
987 :
981 :2010/03/05(金) 15:59:03
>>981 です
あれから色々調べてみたのですが、他のJSPファイルも全て
java.lang.NullPointerExceptionが出るようになってしまいまして……。
web.xmlにおかしな記述でもしているんじゃないかという指摘を受けたのですが、
殆どサーブレットマッピングしかしていないようなものなので、他に消す部分もなく……。
enshu5_jsp.javaというファイルを調べたんですが、そこのjspInit()メソッドで
例外が発生しているので、どうやら其処でNullが出ているらしくて、
とにかく何処でNullになってしまってそれが何故いけないのか調べないといけなくなりました。
このメソッドが読んでいるものに支障があり、それが他のファイルでも呼ばれる所為で
悪影響が出ている、というのまでしか分かっていないのが実情です。
ずっといろんな方に手助けをして頂いたのに、こんなことになってしまい大変申し訳ありませんでした。
988 :
デフォルトの名無しさん :2010/03/05(金) 16:02:38
>>987 最新ソースあげてみぃ
お前さんは自分でも色々やっとるようだからの
990 :
981 :2010/03/05(金) 17:07:08
991 :
デフォルトの名無しさん :2010/03/05(金) 17:36:30
>>990 ファイルをはりつけてアップロードするのではなく、
そのプロジェクトのディレクトリを構成そのまま圧縮してアップロードしてほしい。
そっちのほうがわかりやすい。
992 :
981 :2010/03/05(金) 18:16:54
993 :
デフォルトの名無しさん :2010/03/05(金) 19:17:35
web.xmlにenshu5のservlet-mappingがないのは?
994 :
デフォルトの名無しさん :2010/03/05(金) 19:50:12
995 :
デフォルトの名無しさん :2010/03/05(金) 19:51:48
>>994 続き
ディレクトリ構成
├─lib
│ jsp-api.jar
│ servlet-api.jar
│
├─src
│ └─enshu5
│ Enshu5.java
│ enshu5Bean.java
│
├─webapp
│ └─examples
│ ├─jsp
│ │ enshu5.jsp
│ │
│ └─WEB-INF
│ │ web.xml
│ │
│ ├─classes
│ │ └─enshu5
│ │ Enshu5.class
│ │ enshu5Bean.class
│ │
│ └─lib
│ derby-10.5.3.0_1.jar
ヒント 全部一から作り直せ
997 :
981 :2010/03/05(金) 21:31:32
>>993 すいません! それはweb.xmlに不備があるかなと思ってサーブレットマッピングを
いじってた時のままになってしまっていたこちらのミスです……。
>>994 zip有難う御座います。
しかし……こっちは今までと同じエラーです……。
試しに私の作ったファイルを隔離して、頂いたファイルをディレクトリ構成含め、
同じ名前で配置して開いてみたんですが、変わらずです。
何だかもっと根本的に環境の方もおかしいんでしょうか……。
あと、WEB-INFの下のlibに(私の場合だったら)postgresql-8.3-605.jdbc3.jarを
配置した方がいいのでしょうか?
>>996 正直、本当に仰る通りというか……、それも考えたんですが。
他のファイルまで開かなくなったという事は、ソースというよりもっと
別のところで間違いをしているような気がして、そこから洗い出さないとと思っています……。
998 :
デフォルトの名無しさん :2010/03/05(金) 21:42:31
>あと、WEB-INFの下のlibに(私の場合だったら)postgresql-8.3-605.jdbc3.jarを >配置した方がいいのでしょうか? それでやってみたら?
999 :
デフォルトの名無しさん :2010/03/05(金) 21:43:50
>>997 もう怪しかったらとにかくそれっぽいところに
postgresql-8.3-605.jdbc3.jar
を配置しまくるんだ
あとそのzipで出てるエラーを全部はってくれ。
>>997 それだったらNullPointerExceptionではなく、ClassNotFoundが出るはず
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。