- PR -

サーブレットとDB→JSPの連携

投稿者投稿内容
aki
会議室デビュー日: 2003/04/10
投稿数: 16
お住まい・勤務地: Osaka/Japan
投稿日時: 2003-04-23 09:40
raystarさん、いつもいつも御回答ありがとうございます。
まだBeanの部分が上手く作れておりません。

前回教えて頂いた、set,getのgetAll()の部分にSQL文と
結果を放り込むとありましたが、SQL文がかなり複雑で
jspから送られてきた値によりSQLの処理を分岐し、
その結果によってまた更に分岐といった形をとっております。

↓以下が作成したソースの一部です↓
public void setKoumoku(String tenkey,String tenkeykata,String lancable,String lancablekata){
 if(form_tenkeymei.equals("テンキー")){
  try{
   con = DriverManager.getConnection(jdbcUri+jdbcDbnm,jdbcUser,jdbcPass);
   stmt = con.createStatement();
   rs = stmt.executeQuery("SELECT * FROM dhyojyunM WHERE dkikimei = '" + form_tenkeymei + "'");

   if(rs.next() == true){
rs.close();
stmt.close();
con.close();
return false;
   }
   rs.close();

 StringBuffer aSql = new StringBuffer(400);
 aSql.append("INSERT into dhyojyunM ");
 aSql.append("VALUES (SEQ_DHYOJYUNM.nextval, ");
 aSql.append("'"); aSql.append(form_tenkeymei); aSql.append("',");
 aSql.append("'"); aSql.append(form_tenkeykataban); aSql.append("'");
 aSql.append(")");

 }catch(ClassNotFoundException cnfe){
 cnfe.printStackTrace();
 }
}
else{
 con = DriverManager.getConnection(jdbcUri+jdbcDbnm,jdbcUser,jdbcPass);
 stmt = con.createStatement();
 rs = stmt.executeQuery("SELECT * FROM dhyojyunM WHERE dkikimei = '" + テンキー + "'");

 if(rs.next() == true){
 rs = stmt.executeQuery("DELETE FROM dhyojyunM WHERE dkikimei = '" + テンキー + "'");
 rs.close();
 stmt.close();
 con.close();
 return false;
}
rs.close();

}

if(form_lancablekataban.equals("")){
 con = DriverManager.getConnection(jdbcUri+jdbcDbnm,jdbcUser,jdbcPass);
 stmt = con.createStatement();
 rs = stmt.executeQuery("SELECT * FROM dhyojyunM WHERE dkikimei = '" + form_lancablemei + "'");

 if(rs.next() == true){
  rs = stmt.executeQuery("DELETE FROM dhyojyunM WHERE dkikimei = '" + LANケーブル + "'");
  rs.close();
  stmt.close();
  con.close();
  return false;
 }
rs.close();

else{
 rs.close();
 stmt.close();
 con.close();
}
}
 else if(form_lancablekataban.equals("5M")){
  con = DriverManager.getConnection(jdbcUri+jdbcDbnm,jdbcUser,jdbcPass);
  stmt = con.createStatement();
  rs = stmt.executeQuery("SELECT * FROM dhyojyunM WHERE dkikimei = '" + form_lancablekataban + "'");


みたいな感じです。ストレート過ぎるでしょうか?
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-04-23 23:49
これは。。。。
OOPどころか、ちょっとやばいです。。。
まず、DB接続文字列をセットする個所が沢山あります。
一つにまとめることができる処理です。
入力値の判断(空白かどうか)をメソッド内で
判定しているのはいいのですが、
このあたりはServletに任せましょう。
すると、ソースがもっとシンプルになるはずです。

MVCの役割を考えましょう。
Servlet : 入力値チェック、beanのSET、sessionの作成, forward ,そのた
Bean : setter, getter ,JDBC関連
JSP: 表示、beanからGET

このくらい、シンプル設計でいきましょう。
MVCで役割をきちんと設計していないと
後で痛い目にあうことになりまする。
aki
会議室デビュー日: 2003/04/10
投稿数: 16
お住まい・勤務地: Osaka/Japan
投稿日時: 2003-04-24 09:40
raystarさんアドバイスありがとうございます。
MVCモデルに関しては、以前少し勉強していたので
理解しているつもりでしたが、全然分かっていませんでした。

今後、痛い目にあいたくないのでシンプルな形というと
どういう形になるでしょうか?今までのソースもこのように
作成してきましたので、最悪作り直しという事になるうるかも
しれませんが、ひどくなる前にご教授頂けたら幸いです。
宜しく御願い致します。
aki
会議室デビュー日: 2003/04/10
投稿数: 16
お住まい・勤務地: Osaka/Japan
投稿日時: 2003-04-24 09:46
raystarさん、すみませんもう1つ質問がありました。

以前投稿させて頂いたBeanのソースの一部で
if(form_lancablekataban.equals("")){〜という
二つ目の変数に対してのif文があるのですが、処理がここを
通過してくれません。この原因も宜しければご教授願いたいのですが・・・。
本当に、何度もすみませんが宜しく御願い致します。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-04-24 12:19
引用:

if(form_lancablekataban.equals("")){〜という
二つ目の変数に対してのif文があるのですが、処理がここを
通過してくれません。この原因も宜しければご教授願いたいのですが・・・。
本当に、何度もすみませんが宜しく御願い致します。


form_lancablekataban.equals("")がfalseを返しているからでしょう。
変数の中身を確認してみては。

MVCに関しては
基本的に
Servlet : 入力値チェック、beanのSET、sessionの作成, forward ,そのた
Bean : setter, getter ,JDBC関連
JSP: 表示、beanからGET

です
aki
会議室デビュー日: 2003/04/10
投稿数: 16
お住まい・勤務地: Osaka/Japan
投稿日時: 2003-04-24 12:52
[/quote]
form_lancablekataban.equals("")がfalseを返しているからでしょう。
変数の中身を確認してみては。
[/quote]

System.outで確認してみたのですが、ちゃんと文字が入っていました。
どうも、通ってないような気がします。
aki
会議室デビュー日: 2003/04/10
投稿数: 16
お住まい・勤務地: Osaka/Japan
投稿日時: 2003-04-24 16:05
raystarさん、出来ました!!

Beanの中にそれぞれの処理メソッド(Delete用、Insert用)をし、
サーブレット内にそれぞれBeanメソッドに対応した、
BeanのSET及びsseionを記述しテストしてみたら、上手く表示されました。
本当にありがとうございます。
今回、改めてMVCモデルはとても重要だという事が分かり勉強になりました。

今後、また不明な個所が出てきた場合は宜しく御願いします。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-04-24 20:44
おめでとうございます^^

一人で作る場合はゴリオシ?でもいいですが、
複数人でつくるとなると
MVCの各役割はかなり重要になります。

がんばってくださいね!

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