- - PR -
サーブレットとDB→JSPの連携
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 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 + "'"); みたいな感じです。ストレート過ぎるでしょうか? | ||||
|
投稿日時: 2003-04-23 23:49
これは。。。。
OOPどころか、ちょっとやばいです。。。 まず、DB接続文字列をセットする個所が沢山あります。 一つにまとめることができる処理です。 入力値の判断(空白かどうか)をメソッド内で 判定しているのはいいのですが、 このあたりはServletに任せましょう。 すると、ソースがもっとシンプルになるはずです。 MVCの役割を考えましょう。 Servlet : 入力値チェック、beanのSET、sessionの作成, forward ,そのた Bean : setter, getter ,JDBC関連 JSP: 表示、beanからGET このくらい、シンプル設計でいきましょう。 MVCで役割をきちんと設計していないと 後で痛い目にあうことになりまする。 | ||||
|
投稿日時: 2003-04-24 09:40
raystarさんアドバイスありがとうございます。
MVCモデルに関しては、以前少し勉強していたので 理解しているつもりでしたが、全然分かっていませんでした。 今後、痛い目にあいたくないのでシンプルな形というと どういう形になるでしょうか?今までのソースもこのように 作成してきましたので、最悪作り直しという事になるうるかも しれませんが、ひどくなる前にご教授頂けたら幸いです。 宜しく御願い致します。 | ||||
|
投稿日時: 2003-04-24 09:46
raystarさん、すみませんもう1つ質問がありました。
以前投稿させて頂いたBeanのソースの一部で if(form_lancablekataban.equals("")){〜という 二つ目の変数に対してのif文があるのですが、処理がここを 通過してくれません。この原因も宜しければご教授願いたいのですが・・・。 本当に、何度もすみませんが宜しく御願い致します。 | ||||
|
投稿日時: 2003-04-24 12:19
form_lancablekataban.equals("")がfalseを返しているからでしょう。 変数の中身を確認してみては。 MVCに関しては 基本的に Servlet : 入力値チェック、beanのSET、sessionの作成, forward ,そのた Bean : setter, getter ,JDBC関連 JSP: 表示、beanからGET です | ||||
|
投稿日時: 2003-04-24 12:52
[/quote]
form_lancablekataban.equals("")がfalseを返しているからでしょう。 変数の中身を確認してみては。 [/quote] System.outで確認してみたのですが、ちゃんと文字が入っていました。 どうも、通ってないような気がします。 | ||||
|
投稿日時: 2003-04-24 16:05
raystarさん、出来ました!!
Beanの中にそれぞれの処理メソッド(Delete用、Insert用)をし、 サーブレット内にそれぞれBeanメソッドに対応した、 BeanのSET及びsseionを記述しテストしてみたら、上手く表示されました。 本当にありがとうございます。 今回、改めてMVCモデルはとても重要だという事が分かり勉強になりました。 今後、また不明な個所が出てきた場合は宜しく御願いします。 | ||||
|
投稿日時: 2003-04-24 20:44
おめでとうございます^^
一人で作る場合はゴリオシ?でもいいですが、 複数人でつくるとなると MVCの各役割はかなり重要になります。 がんばってくださいね! | ||||
