- ベストアンサー
データベース接続をどのように関数にすればよいか分かりません
この処理を何回か使うので関数にすることになりました。 しかし、例外を考えて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); } } } }
- みんなの回答 (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() { // 実際の処理 } }
その他の回答 (1)
- askaaska
- ベストアンサー率35% (1455/4149)
一般的には ・コネクションの取得 ・コネクションの開放 の2つを用意するわ。 そして try { ・コネクションの取得 //処理// }finally{ ・コネクションの開放 } こんな風に実装するのよ。 注意:かなり端折ってるわ。
お礼
アドバイスありがとうございます。 上記をクラスにしたとき、 処理の部分をどうやって使用するか分からなくて困っていました。 なんとか、できそうです。 ありがとうございました。
補足
アドバイスありがとうございます。 やっとで、分かってきました。 今までは、main文の中に接続処理をどうやって 組み込こめばよいかと考えていたのですが、 main文を中に組み込んでしまうのですね。 何とかできそうです。ありがとうございました。