• ベストアンサー

データベース接続をどのように関数にすればよいか分かりません

この処理を何回か使うので関数にすることになりました。 しかし、例外を考えてtry、catchを使うとすると 処理を入れられないで接続終了になってしまいます。 throwsで全部例外をなげるしかないのでしょうか? 分かる方がいましたら、教えてください。 よろしくお願いします。 public void Connect()throws ServletException,IOException {  try{   String drv = "org.gjt.mm.mysql.Driver";   String url = "jdbc:mysql://localhost/keijiban?useUnicode=true&characterEncoding=sjis";   String usr = "";   String pw = "";   Class.forName(drv);   cn = DriverManager.getConnection(url,usr,pw);  //処理を入れる所////////////////////////  }catch(Exception e){   e.printStackTrace();  } finally {   if (cn != null) {    try {     cn.close();    } catch (SQLException e) {     throw new ServletException(e);    }   }  } }

質問者が選んだベストアンサー

  • ベストアンサー
  • sh_hirose
  • ベストアンサー率66% (56/84)
回答No.2

基本はNo.1の方のやり方でいいと思います。 あとはクラスの継承を利用するとか。 (私はこの方法をStruts1.x系で使用しています。) /** * 継承クラス */ public class AbstructSQL {  public void execute() throws ServletException {   try {    String drv = "・・・";    String url = "・・・";    String usr = "・・・";    String pw = "・・・";    Class.forName(drv);    cn = DriverManager.getConnection(url,usr,pw);    // トランザクション    main();    // コミット   } catch( Exception e) {    // ロールバック    e.printStackTrace();   } finally {    if( con != null ) {     try {      con.close();     } catch( SQLException e ) {      throw new ServletException(e);     }    }   }  }  public abstruct void main(Connection con); } /** * 処理クラス */ public class SqlExe extends AbstructSQL {  public void main() {   // 実際の処理  } }

qqtaka
質問者

補足

アドバイスありがとうございます。 やっとで、分かってきました。 今までは、main文の中に接続処理をどうやって 組み込こめばよいかと考えていたのですが、 main文を中に組み込んでしまうのですね。 何とかできそうです。ありがとうございました。

その他の回答 (1)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

一般的には ・コネクションの取得 ・コネクションの開放 の2つを用意するわ。 そして try { ・コネクションの取得 //処理// }finally{ ・コネクションの開放 } こんな風に実装するのよ。 注意:かなり端折ってるわ。

qqtaka
質問者

お礼

アドバイスありがとうございます。 上記をクラスにしたとき、 処理の部分をどうやって使用するか分からなくて困っていました。 なんとか、できそうです。 ありがとうございました。

関連するQ&A

専門家に質問してみよう