2012-03-30 17 views
0

データベースから管理レベルのIDを特定するためのプログラムの作成。私はサイトを通して何度もこの同じ接続方法を使用しましたが、それ以外の場所ではハングしません。しかし、これらのメソッドは実際のクラスには埋め込まれていません。この特定のコードをJavaクラスに入れてハングアップさせる理由はありますか?ただ、繰り返しにjavaでのデータベース接続の取得がハングする

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.util.*; 
import java.io.*; 
import oracle.jdbc.driver.OracleDriver; 
import java.sql.*; 

public class connection 
{ 

    public Connection getDBConnection() 
    { 
    java.sql.Connection conn=null; 

    try 
    { 
     DriverManager.registerDriver(new OracleDriver()); 
     conn = DriverManager.getConnection("stuff"); //Hangs here for like 2 seconds 

    } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

    return conn;  
    } 
} 

は、私がまっすぐJSP(つまりJSPでいないクラス)を介してこれを使用するサイトをthroughtが、この特定のセグメントのために、私はクラス内のメソッドとしてそれを実装しました。これが唯一の場所です。また、データベースの接続作業を行うための特定のインポートを私に与えることができれば、私はそれらのいくつかを取り除くことができます。* ... ...それはすばらしいでしょう。 ありがとう

編集:オブジェクトXを作成し、オブジェクトXにこのメソッドを呼び出す接続クラスオブジェクトを作成します。

ので、

someClass whatever = new someClass(); 
Connection conn = null; 
conn = whatever.getDBConnection(); //hangs 
+0

ベストプラクティスの考え方 - クラス名は大文字( 'Connection')で始まる必要があります。 'java.sql.DriverManager'と' oracle.jdbc.driver.OracleDriver'をインポートするだけです。クラス名を変更する場合は、戻り値の型を 'java.sql.Connection'に変更してください。ほとんどの場合、JSPからのデータベース接続は避ける必要があります。これを行うデータアクセス層が必要です。 –

+0

しかし、私はjspのデータアクセス層と思った。バー、私は本当にこの事を知っていた誰かを知りたがっています。 – cphilpot

+0

@cphilpot私はMrJamesの答えにあなたの提案された編集を承認しました。その情報はまだそこにあった投稿のリビジョン履歴で利用可能であることに注意してください。通常、SOで完全に削除されるものはありませんが、この場合はmodからDBからパージできるかどうかを確認するフラグが付きます。 – Pops

答えて

1

あなたは他の場所での接続をプールしていますか?毎回新しい接続を作成する場合は、数秒かかることがあります。

+0

これはホームページ上にあるので、クラス内で呼び出される前にちょうど1つの接続が作成されています。だから、なぜそれが接続プーリングの問題になるのかわかりません。しかし、私はまだこれに新しいです。 – cphilpot

+0

ドライバマネージャを直接使用するのではなく、Webアプリケーション内のデータソースを使用しているはずです。 –

+0

私はそれが意味することを知っていれば、私はそれの上にあるだろう。どのように私はそれについて行くだろうかを説明して心ですか? – cphilpot

1

また、OracleDriverの登録はいつもですか?

ドライバは一度登録してください。

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.util.*; 
import java.io.*; 
import oracle.jdbc.driver.OracleDriver; 
import java.sql.*; 

public class connection 
{ 
    static { 
     try { 
     DriverManager.registerDriver(new OracleDriver()); 
     } 
     catch (SQLException excep) { // log exception } 
    } 


    public Connection getDBConnection() 
    { 
    java.sql.Connection conn=null; 

    try 
    { 
     conn = DriverManager.getConnection("stuff"); //Hangs here for like 2 seconds 

    } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

    return conn;  
    } 
} 
+3

Webコンテナ内で実行している場合は、以前にWebコンテナ管理コンソールで設定したDataSource(JNDI経由)を使用する必要があります。PS:このコードを単一のJavaクラスアプリケーションで実行したいと考えました – MrJames

+0

ありがとう、なぜ簡単に説明するのか? – cphilpot

+0

[DataSource](http://docs.oracle.com/javase/7/docs/api/javax/sql/DataSource.html)を使用している場合、db構成(IP、ユーザー、等)あなたはデータソース 'X'を取得する必要があります。誰がWebコンテナを管理して、あなたの設定を定義しますか。彼はDataSource 'X'がip:y、user:z ...などを意味すると定義します。 – MrJames

関連する問題