★★ Java の宿題ここで答えます Part 68 ★★

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2010/03/03(水) 17:24:37
色々いじったソースの現在の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);
}
954デフォルトの名無しさん:2010/03/03(水) 17:36:23
>>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;
  }

でした。
955デフォルトの名無しさん:2010/03/03(水) 17:41:16
>>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)

になってしまいます。
956デフォルトの名無しさん:2010/03/03(水) 17:43:05
原因

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)


私が書き換えの時にミスをしている可能性がありますので、
もう一度現在のソースをアップロードして見て頂いてもいいですか?
957デフォルトの名無しさん:2010/03/03(水) 17:45:39
>>956
それがいいかもわからんw
958デフォルトの名無しさん:2010/03/03(水) 18:15:45
すいません、アップロードしました。
宜しければ再度お願いします。

http://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/940.txt
959デフォルトの名無しさん:2010/03/03(水) 18:30:07
>>958
直接関係ないけど、jspのwhileはいるもんだと思っていいんかね?
エラーこいてる
960デフォルトの名無しさん:2010/03/03(水) 18:37:35
>>959
失礼しました、whileにコメントアウトが掛かったままでした。
検索した結果を<table>で表にするためのものなので。

ResultSet rsがおかしいなら、とりあえずデータベースの開閉のみ
行ってみようと思って一度それに関するプログラムをコメントアウトしていたんですが、
それが残ったままでした。
961デフォルトの名無しさん:2010/03/03(水) 18:49:58
>>960
Connectionもthis.conを使わないとだめだな
962デフォルトの名無しさん:2010/03/03(水) 18:50:52
あぁでもclose()だけか、影響でるの
963デフォルトの名無しさん:2010/03/03(水) 19:07:17
>>961
stmtもthis.stmtにしているので、とりあえず統一してみました
そもそもデータベースにすら繋がってるかどうかが見えないので、
まだ結果は分かりませんが……。
964デフォルトの名無しさん:2010/03/03(水) 19:37:17
>>963
おれんとこだとそれっぽく動くんだよなぁ。
まだNullPointerExceptionでる?
965デフォルトの名無しさん:2010/03/03(水) 20:12:52
>>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出来ていないということになるんでしょうか?
966デフォルトの名無しさん:2010/03/03(水) 20:18:21
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が出てるところは、
まったく同じところ?
971デフォルトの名無しさん:2010/03/03(水) 21:09:29
>>968-969
こんなに早くありがとうございます!
HashMapの使い方が非常に勉強になりました!
972デフォルトの名無しさん:2010/03/03(水) 21:17:56
>>970
いや、その時点ではvalueの値がnullなので検索していない=表はそれ以上
表示されないということになります。
なので、DBとの繋がりはそこでは見えません。

全く同じです。ResultSetとexecuteQueryのところでやはり
NullPointerExceptionになってしまいます。
973デフォルトの名無しさん:2010/03/03(水) 21:46:25
>>972
結局、締切いつまでなん?
974デフォルトの名無しさん:2010/03/03(水) 22:00:00
とにかく途中でもいいから「出せ」と言われていたのが16時までだったので、
未完成なプログラムのまま提出してきました……。

でも結局分からなければ意味がないというか、後々またこれの発展問題みたいなのは
どんどん出てくるんで、出来ればとにかく理解して完成させたいと思っています。


しかし、朝からずっと教えて下さってる方々には本当申し訳ないです……。
975デフォルトの名無しさん:2010/03/03(水) 22:26:34
>>974
横からだが
JSP関係なく、JUnitなり普通のmain文書くなりして、
普通にJDBCでResultSet取れてくるか確認しましょう。
976デフォルトの名無しさん:2010/03/04(木) 00:00:13
>>975
凄く単純なJavaのソース(JSPやServlet、Beanなどではない)で、
JDBCに接続してみましたが、SQL文を

SELECT * FROM 学生名簿;

としてResultSetを使ったところ、ちゃんとした結果が返ってきました。
接続のソースは殆どここから持ってきているので、問題は無いと
思ったんですが……。
977デフォルトの名無しさん:2010/03/04(木) 01:10:42
サーブレットコンテナのWebアプリクラスパスを確認してください。
過去のコンパイル結果が残ったまま実行されているように見えます。

enshu5Beanに行った修正が正しく反映されるか確認しましょう。
例えばexecuteQueryメソッド内で標準出力に文字列を出してみるなど。

テスト用のシンプルな構成でJDBC接続が問題ないのであれば、
おそらく問題はサーブレット実行環境の設定(正しい.classが参照されていない)です。
978デフォルトの名無しさん:2010/03/04(木) 02:50:50
>>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();
980979:2010/03/04(木) 11:55:59
>>978
ごめん。もうやってたのね
981デフォルトの名無しさん:2010/03/04(木) 13:07:29
>>979
とりあえずはその部分も変更してみました。有難う御座います。
ですが接続は出来てもResultSetで取得の部分で詰まってる=DBの内容を表示できない……という事で
接続が成功したかも定かでないので、まだ結果をお知らせできないのが申し訳ないです……。

色々ソースを変えてみた結果、今度は

Type mismatch: cannot convert from String to ResultSet

と出るようになってしまったので、とりあえず一から組みなおしてみようと思います。
beanから呼び出すところで足止めされているようにも見えるので、
JSP内でDBを呼び出してみて(あまりいい方法とは言えないと聞きましたが……)、
それで成功するかどうか試してみたいと思います。

>>977で言って頂いたように、恐らく環境の方で不備もあると思いますので、
その辺りも見直してきます。
982デフォルトの名無しさん:2010/03/04(木) 20:34:05
久々に白熱してんね
983デフォルトの名無しさん:2010/03/05(金) 13:01:57
【 課題 】プログラムを理解するために十分な量のコメント文を記載する。
http://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/942.java
【 形態 】1. Javaアプリケーション(main()で開始)? 
【 期限 】 3月8日
【 Ver  】 ?
【 補足 】 できたあとプログラムソースや実行結果をもとにした質問に口頭で答えなければいけません・・・
        お手数ですが宜しくお願いします

984デフォルトの名無しさん:2010/03/05(金) 14:13:18
>>983
さすがにそれはおまいさんがわかんないところを聞いた方が早いぞ
何行目は何をやってるの?って
まるでわからないってのなら口頭で答えられないからあきらめろ
985デフォルトの名無しさん:2010/03/05(金) 15:19:23
>>984
ほっとけ、こういうカスがIT業界にこられちゃたまらん
986デフォルトの名無しさん:2010/03/05(金) 15:55:14
>>985
このスレはプログラミングなんて興味がなく、
IT業界に行く気もないやつが
宿題を丸投げするスレかと
987981: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
eclipseつかっとるん?
989デフォルトの名無しさん:2010/03/05(金) 16:08:26
>>987
最新ソースあげてみぃ
お前さんは自分でも色々やっとるようだからの
990981:2010/03/05(金) 17:07:08
>>988
テキストエディタでソースを書いて、コマンドプロンプト使ってコンパイルしてます。

一応eclipseは持っていて、本来はせっかくならそれを使った方がいいとも思うんですが、
授業で使ってたときに相当それでソースを書く時に楽をしてしまった所為で、あまり身についていないかなという
感覚があるというか…一からテキストエディタでやってみようかと思って。


>>989
有難う御座います……!!

現段階ではEnshu5.java、enshu5Bean.java、enshu5.jspもあまり変わっていないですが、念の為…。
http://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/944.txt

あと、こっちがenshu5_jsp.javaとweb.xmlになります。
http://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/943.txt
このenshu5_jsp.javaのjspInit()というメソッドの行が先頭にNullPointerが出るので……。
991デフォルトの名無しさん:2010/03/05(金) 17:36:30
>>990
ファイルをはりつけてアップロードするのではなく、
そのプロジェクトのディレクトリを構成そのまま圧縮してアップロードしてほしい。

そっちのほうがわかりやすい。
992981:2010/03/05(金) 18:16:54
アップロードしてみました。こういう事で大丈夫なんでしょうか……間違ってたら申し訳ありません。
ファイルの構成だけそのままで、上記で提示しているファイル以外は殆ど入っていないんですが……。
あと、libにはpostgresql-8.3-605.jdbc3.jar、jsp-api.jar、servlet-api.jarなどが本来なら入っています。
何か不備や、これ足りないだろっていうのがあったら仰って頂けると有難いです。

http://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/945.zip
993デフォルトの名無しさん:2010/03/05(金) 19:17:35
web.xmlにenshu5のservlet-mappingがないのは?
994デフォルトの名無しさん:2010/03/05(金) 19:50:12
とりあえずJSPは表示されたぞ
http://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/946.zip

ちょっと変えたところ
・ソースファイルの場所を変えた
・DBにpostgresの環境がないからderbyを使った
・↑に伴いDBのテーブル名、カラム名を英語に
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

996デフォルトの名無しさん:2010/03/05(金) 19:55:35
ヒント 全部一から作り直せ
997981: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で出てるエラーを全部はってくれ。
1000デフォルトの名無しさん:2010/03/05(金) 22:23:04
>>997
それだったらNullPointerExceptionではなく、ClassNotFoundが出るはず
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。