- PR -

ResultSetへの処理がHTMLの処理を邪魔する

1
投稿者投稿内容
take
大ベテラン
会議室デビュー日: 2004/08/13
投稿数: 177
お住まい・勤務地: 沖縄県北部
投稿日時: 2004-11-25 09:27
いつも御世話になります。j2sdk1.4.2_05 MYSQL4.1.5gamma eclipse2.1.3 tomcat5.0.24 で開発しています。会社の情報を管理するWEBアプリです。jspで、ResultSetへの処理を書くのと書かないのとで不具合になるかならないかが分かれる部分があります。文法的にどうおかしいのかがどうしても分からないので質問させていただきます。ソースコードは下記です。おかしいところは一番下の方に示します。

***** henkou.jsp ********

<%@ page language="java" pageEncoding="EUC-JP"
import="kamiBeans.*,java.sql.*"%>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>社員情報変更</title>
<link rel='stylesheet' href='/web/kamistyle.css' type='text/css'>
</head>
<!--家族情報変更後ならスクリプトを書く-->
<%if(request.getAttribute("j_script_jump") != null){%>
<script language='JavaScript'>
function _jumpurl(url){
if(url != ''){window.location = url}
}
</script>
<body bgcolor="#FFFFFF" onload="_jumpurl('#kazoku')">
<%}else{%>
<body bgcolor="#FFFFFF">
<%}%>

<%String sid=request.getParameter("sid");

DbConnect db=new DbConnect();
DbConnect db2;
ResultSet rs;
ResultSet rs2;
String sql="select * from syainmasta sm"+
" left join busyo bu on sm.busyoid=bu.busyoid"+
" left join yakusyoku ya on sm.yakusyokuid=ya.yakusyokuid"+
" left join bloodtype bl on sm.bloodtypeid=bl.bloodid"+
" where syainid="+sid;
rs=db.selDb(sql);
if(rs.next()){%>
<table border='1' align='center'><form action='/web/servlet/SyainInfoChange' method='post'>
<tr><td align='center' colspan='2'><h1>社員情報変更</h1></td></tr>
<tr><td colspan='2'><a href='#kazoku'>家族情報へ</a></td></tr>
<input type='hidden' name='sid' value='<%=sid%>'></input>
<tr><td>氏名</td><td><input type='text' size='50' name='simei' value='<%=rs.getString("simei")%>'></td></tr>
<tr><td>氏名フリガナ</td><td><input type='text' size='50' name='simei_furi' value='<%=rs.getString("simei_furi")%>'></td></tr>
<tr><td>住所</td><td><input type='text' size='50' name='juusyo' value='<%=rs.getString("juusyo")%>'></td></tr>
<tr><td>自宅電話番号</td><td><input type='text' size='50' name='tel' value='<%=rs.getString("tel")%>'></td></tr>
<tr><td>携帯電話番号</td><td><input type='text' size='50' name='keitai_tel' value='<%=rs.getString("keitai_tel")%>'></td></tr>
<tr><td>PCメールアドレス</td><td><input type='text' size='50' name='mail' value='<%=rs.getString("mail")%>'></td></tr>
<tr><td>携帯メールアドレス</td><td><input type='text' size='50' name='keitai_mail' value='<%=rs.getString("keitai_mail")%>'></td></tr>
<!--部署-->
<%sql="select * from busyo";
db2=new DbConnect();
rs2=db2.selDb(sql);
TagMaker tm=new TagMaker();//タグメーカー宣言%>
<tr><td>部署</td><td><%=tm.combo(rs2,"busyoid","busyomeisyou","busyoid",rs.getInt("busyoid"))%></td></tr>

<!--役職-->
<%sql="select * from yakusyoku";
rs2=db2.selDb(sql);%>
<tr><td>役職</td><td><%=tm.combo(rs2,"yakusyokuid","yakusyokumei","yakusyokuid",rs.getInt("yakusyokuid"))%></td></tr>

<!--血液型-->
<%sql="select * from bloodtype";
rs2=db2.selDb(sql);%>
<tr><td>血液型</td><td><%=tm.combo(rs2,"bloodid","bloodtype","bloodid",rs.getInt("bloodid"))%></td></tr>

<!--誕生日-->
<tr><td>誕生日</td><td><%=tm.daysSelect(rs.getDate("birthday"),1900,"birth")%></td></tr>

<!--取得免許-->
<%
sql="select * from menkyomasta";
rs=db.selDb(sql);
sql="select * from menkyojoukyou mj"+
" left join menkyomasta mm on mj.menkyoid=mm.menkyoid"+
" where mj.syainid="+sid;
rs2=db2.selDb(sql);%>
<tr><td>取得免許</td><td><table border='1' align='center'><tr align='center'><td>取得チェック</td><td>取得日</td><td>免許番号</td></tr>

<%boolean flag=false;
String mname=null;

while(rs.next()){
flag=false;
rs2.beforeFirst();
while(rs2.next()){%>
<%if(rs.getString("menkyoid").equals(rs2.getString("menkyoid"))){
flag=true;
break;
}else{
flag=false;
}
}

mname="menkyosyutokubi"+rs.getString("menkyoid");
if(flag){%>
<tr><td><input type='checkbox' name='menkyoid' value='<%=rs.getString("menkyoid")%>' checked><%=rs.getString("menkyomeisyou")%></td>
<td><%=tm.daysSelect(rs2.getDate("syutokubi"),1900,mname)%></td>
<td><input type='text' size='25' name='menkyobangou_<%=rs.getString("menkyoid")%>' value='<%=rs2.getString("menkyobangou")%>'></td>
<%}else{%>
<tr><td><input type='checkbox' name='menkyoid' value='<%=rs.getString("menkyoid")%>'><%=rs.getString("menkyomeisyou")%></td>
<td><%=tm.daysSelect(null,1900,mname)%></td>
<td><input type='text' size='25' name='menkyobangou_<%=rs.getString("menkyoid")%>'></td>
<%}%>
</tr>
<%}%>
</table>
</td></tr>
<!--退職情報他-->
<tr><td>その他情報</td><td>
<input type='checkbox' name='yesnos' value='1'>退職済みにする</input>
</td></tr>
<!--送信ボタン-->
<tr><td colspan='2' align='center'>
<input type='submit' name='kojininfochange' value='ここまでの情報を変更'></input>
</td></tr>
</form>


<!--家族の情報-->

<tr><td><a name='kazoku'>家族情報</a></td><td>
<table border='1' align='center'>
<%sql="select * from kazokukousei kz left join zokugara zk on kz.zokugaraid=zk.zokugaraid where syainid="+sid;


rs2=db2.selDb(sql);%> ←(ここが問題の場所)



</table></td></tr>


</table><!--一番外側のテーブルタグ-->
<%rs.close();rs2.close();db.close();db2.close();}else{%>
えらー
<%}%>
</body>
</html>

本当は問題の場所の下に処理がくるのですが、今は省略しています。rs2=db2.selDb(sql)を書くと、免許情報の途中で止まってしまい、書かないで実行してみるとちゃんと</html>まで書き出してくれます。
rs2=db2.selDb(sql) は、データベースに接続してResultSetを返すクラスから結果を受け取る処理です。
分かりにくい説明で申し訳ないです。どうぞよろしくお願いします。
影フリー
常連さん
会議室デビュー日: 2004/11/12
投稿数: 39
お住まい・勤務地: 東京都
投稿日時: 2004-11-25 09:59
システムのスペックがj2sdk1.4.2_05 MYSQL4.1.5gamma eclipse2.1.3 tomcat5.0.24なら
大体最新構成ですね。ですがコティングはかなり古い方法です。
JSPの中にModel、Control、Viewのすべてが混在してDebugを完全に無視するコティング方法です。このままじゃ、開発はおろかメンテナンスもつらくなります。
ソースを見ても複雑くて分かりません。少なくともModelとViewぐらいは分離したほうがよいです。
問題の部分がrs2=db2.selDb(sql)ならdb2#selDbメソッドの中でExceptionが発生されてるんじゃないかと思います。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-11-25 10:01
止まっているというのは、どういう状況でしょうか。
・例外が表示されている
・デットロックしている
・対象ステップで処理が終了している・・・等

「分かりにくい説明で申し訳ないです。」と書くぐらいでしたら、
できるだけ現象を細かく書いたほうがわかりやすいですよ。

DbConnectクラスで何をしているのかわりませんが、
例外が発生していないですか?
文字列結合で生成したSQLはそもそも正しく実行される物ですか?
Eclipseのコンソールには何か出力されていませんか?

思うにソース上部でも同じようなことをしてますよね。
その部分までは正常に表示されていると解釈すると
対象のSQL実行部分がおかしいと思いますので、
単にSQLがおかしいとか、そういう話ではないのでしょうか。
take
大ベテラン
会議室デビュー日: 2004/08/13
投稿数: 177
お住まい・勤務地: 沖縄県北部
投稿日時: 2004-11-25 11:05
引用:

問題の部分がrs2=db2.selDb(sql)ならdb2#selDbメソッドの中でExceptionが発生されてるんじゃないかと思います。


引用:

単にSQLがおかしいとか、そういう話ではないのでしょうか。




おっしゃるとおり、SQLの単純な間違いでした。zokugaraid のはずが zokutaraidというフィールドでテーブルを作成してしまっていたので。エラーページが出るはずと思い込んでいたのですが、参照しているクラスの内部で発生したエラーはエラーページとして表示されないこともあるんですね。
ありがとうございました。

引用:

ソースを見ても複雑くて分かりません。少なくともModelとViewぐらいは分離したほうがよいです。



いろいろな文献を見ていても、なかなかこの概念が頭の中に入らず、こういう風になってしまいました。Strutsを使ってみようかと思ったのですが、一人で開発するのには向かないと思いやめました。勉強しなければならない事項だと分かっているのですが、皆様がどのように勉強されているかを教えていただけるとありがたいです。


1

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