- PR -

servlet→db→jspの連携について

投稿者投稿内容
ティガー
会議室デビュー日: 2005/02/13
投稿数: 11
投稿日時: 2005-02-13 18:28
るぱん様
申し訳ありません。
ご回答ありがとうございます。
エラーの内容は、Contrllerservlet.java:11:<identifier>がありません。
             同上     :シンボルを解釈出来ません。
             同上     :メソッド本体がないか、abstractとして宣言されています。
                   35:')'がありません。
です。
お仕事中にも関わらず、ありがとうございます。
もっと気を引き締めて、回答いたします。
ご無礼な点お詫び申し上げます。
環境
os:winxp
webserver:tomcat
db:mysql           
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-02-13 18:48
引用:

モキチさんの書き込み (2005-02-13 18:28) より:
エラーの内容は、Contrllerservlet.java:11:<identifier>がありません。
             同上     :シンボルを解釈出来ません。
             同上     :メソッド本体がないか、abstractとして宣言されています。
                   35:')'がありません。
です。
    


1回でコピペしました?
エラーの内容は、「どこかに【)】が無いんだけど・・・。」
って言う内容です。

閉じていない所をご自分のソースコードの中から探して頂けますか?
コピペで失敗している可能性もあります。

【(】と【)】は対になります。
【{】と【}】は対になります。

パテ太
ベテラン
会議室デビュー日: 2004/08/16
投稿数: 64
お住まい・勤務地: 千葉・東京
投稿日時: 2005-02-13 18:59
引用:

モキチさんの書き込み (2005-02-13 17:17) より:

while(rs.next())
{
int kokyaku_cd=rs.getInt("no");
String kokyaku_name=rs.getString("name");
String kokyaku_mail=rs.getString("mail");
}



パテ太です。
本筋はるぱんさんがご説明されているので
私は気になったところを2つばかり。

1.while ブロックの中で変数を宣言していますが
 この変数は while の外から見えませんから
 この代入は意味がありません。
2.int と String で値を受けていますが
 ResultSet のレコードが複数ある時は
 前の値を次の値で上書きしてしまうので
 得られる値は最終行のみです。

ソースの感じから何かの一覧表を作りたいのかな?と
思ったのですが配列で受けないで大丈夫ですか?
それとも最後の1行で良いのでしょうか?
でも最後の1行で良い場合も order by とかで
指定しないと最後の1行が特定できませんが・・・。

事前に ResultSet の個数が分からないと
配列では受けられませんね。

ArrayList でなくて大丈夫ですか?

[ メッセージ編集済み 編集者: パテ太 編集日時 2005-02-13 19:07 ]
ティガー
会議室デビュー日: 2005/02/13
投稿数: 11
投稿日時: 2005-02-13 19:02
るぱん様
ご回答ありがとうございます。
見直したのですが、抜けている点が、見あたりませんでした。コピペしたソースを、
package servletproject;

import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import java.io.*;

public class Contrllerservlet
{


public void doPost(httpServletRequestrequest,httpServletResponse response)
{
Connection con = null;
Statement stmt = null;

Class.forName("com.mysql.jdbc.Driver");
String url= "jdbc:mysql:///kokyakuuseUnicode=true&characterEncoding=SJIS";
con = DriverManager.getConnection(url,"root","passwd");
stmt = con.createStatement();
String sql = "SELECT * FROM kokyaku";
ResultSet rs = stmt.executeQuery(sql);

while(rs.next())
{
int kokyaku_cd = rs.getInt("no");
String kokyaku_name = rs.getString("name");
String kokyaku_mail = rs.getString("mail");
break;
}
request.setCharacterEncoding("Shift_JIS");
request.setAttribute("KokyakuCD",kokyaku_cd);
request.setAttribute("KokyakuName",kokyaku_name);
request.setAttribute("KokyakuMail",kokyaku_mail);
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/jsp/kokyakuEXE.jsp");
rd.forward(request,response);
}
}

すべて選択でまたコピペしてみました。抜けている点ありませんよね?
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-02-13 19:03
ご指摘ありがとうございます。

エラーをたくさん経験することが理解の近道と思ったので、
元のソースコードをコンパイルしやすい形にしか加工してません。

エラーの読み方がわかれば、次は何をするべきかも見えてくると思います。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-02-13 19:29
これでどうですか?
たぶんコレでもたくさんエラーが出ると思います。


httpServletRequestrequest  → HttpServletRequest request

コード:
package servletproject; 

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.sql.*; 
import java.io.*; 

public class Contrllerservlet 
{ 


    public void doPost(HttpServletRequest request , HttpServletResponse response) 
    { 
        Connection con = null; 
        Statement stmt = null; 

        Class.forName("com.mysql.jdbc.Driver"); 
        String url= "jdbc:mysql:///kokyakuuseUnicode=true&characterEncoding=SJIS"; 
        con = DriverManager.getConnection(url,"root","passwd"); 
        stmt = con.createStatement(); 
        String sql = "SELECT * FROM kokyaku"; 
        ResultSet rs = stmt.executeQuery(sql); 

        while(rs.next()) 
        { 
            int kokyaku_cd = rs.getInt("no"); 
            String kokyaku_name = rs.getString("name"); 
            String kokyaku_mail = rs.getString("mail"); 
            break; 
        } 
        request.setCharacterEncoding("Shift_JIS"); 
        request.setAttribute("KokyakuCD",kokyaku_cd); 
        request.setAttribute("KokyakuName",kokyaku_name); 
        request.setAttribute("KokyakuMail",kokyaku_mail); 
        ServletContext sc = getServletContext(); 
        RequestDispatcher rd = sc.getRequestDispatcher("/jsp/kokyakuEXE.jsp"); 
        rd.forward(request,response); 
    } 
} 

ティガー
会議室デビュー日: 2005/02/13
投稿数: 11
投稿日時: 2005-02-13 20:37
ご回答ありがとうございます。
レス遅くなりました。
先程のご指摘によりますと、
この、コンパイルエラーの原因の1つとして、kokyaku_cd,name,mailは whileの外で、変数を宣言しろよとエラーでは言っているんでしょうか?
なので、request.setAttributeでシンボルが解釈出来ませんとでているんですか?
あとは、プログラムの概要は、メール一括配信プログラムを作っています。
ですから、ご指摘によるところの配列を使わないといけないと思うのです。
配列は、
public ArraList findall()
{
ArraList list = new ArraList();
これを使えばよいのでしょうか?
パテ太
ベテラン
会議室デビュー日: 2004/08/16
投稿数: 64
お住まい・勤務地: 千葉・東京
投稿日時: 2005-02-13 21:09
引用:

モキチさんの書き込み (2005-02-13 20:37) より:

先程のご指摘によりますと、
この、コンパイルエラーの原因の1つとして、kokyaku_cd,name,mailは whileの外で、変数を宣言しろよとエラーでは言っているんでしょうか?
なので、request.setAttributeでシンボルが解釈出来ませんとでているんですか?



パテ太です。
シンボルが解釈できません。のエラーは
仮に事前に宣言されていたとしても
そこからは見えません。ということを示しているので
モキチさんの言うとおりです。

ResultSet の格納には ArrayList を使用すれば良いと
思うのですが、 ArrayList に格納すべきものは
たとえば
コード:

class Customer {
int kokyaku_cd;
String kokyaku_name;
String kokyaku_mail;
public int getKokyakuCd() { return kokyaku_cd; }
public String getKokyakuName() { return kokyaku_name; }
public String getKokyakuMail() { return kokyaku_mail; }
public void setKokyakuCd(int kokyakuCd) { kokyaku_cd = kokyakuCd; }
public void setKokyakuName(String kokyakuName) { kokyaku_name = kokyakuName; }
public void setKokyakuMail(String kokyakuMail) { kokyaku_mail = kokyakuMail; }
}


のようなものになると思います。

[編集内容]
戻り値を忘れてました。

[ メッセージ編集済み 編集者: パテ太 編集日時 2005-02-13 21:11 ]

スキルアップ/キャリアアップ(JOB@IT)