2011-12-07 6 views
2

私はJDBCを使って作業していますが、実際にConnectionコードを他のオブジェクトに渡すにはどうすればいいですか?それで、それをコーディングし続けるのはあまり面倒ではなく、データベース接続を閉じる必要がある場合は、他のオブジェクトを作成する必要がありますか?ここに私のコードでは、あなたは、通常、必要に応じて接続を取得し、あなたのSQLを実行し、その後、それを閉じ接続コードを渡すには?

import java.sql.Connection; 
import java.sql.ResultSet; 
import java.sql.ResultSetMetaData; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.Scanner; 

import javax.sql.DataSource; 

public class DisplayUsers { 

    ResultSet resultSet = null; 
    Statement statement = null; 
    Scanner input = new Scanner(System.in); 
    DataSource ds = null; 



    public void showAll() { 

     System.out.println("Search User: "); 
     String user = input.nextLine(); 

     String query = "Select * from user"; 
     try { 
      resultSet = statement.executeQuery(query); 
      ResultSetMetaData metadata = resultSet.getMetaData(); 
      int columns = metadata.getColumnCount(); 
      while(resultSet.next()){ 
       for(int i = 1 ; i<=columns;i++){ 
        System.out.printf("%-8s\t",resultSet.getObject(i)); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

はここに私のコネクタコード

import java.sql.*; 

public class Jdbc { 

     public void dbConn(){ 
      final String url = "jdbc:mysql://localhost:3306/payroll"; 
      Connection conn = null; 
      try{ 
       Class.forName("com.mysql.jdbc.Driver"); 
       conn = DriverManager.getConnection(url,"root","123192"); 
      }catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 
} 

答えて

1

接続プールを使用するのが最善の方法です。 Java EEアプリケーションをコーディングする場合は、プールを構成で作成できます(glassfishでは管理コンソールを使用できます)。サーバーは、指定したJNDI名(「jndi/mydb」など)にこのプール(DataSource経由)をバインドします。

だから、コードで接続を取得することは非常に簡単です:

InitialContext ctx = new InitialContext(); 
//Application Server will automatically bind new InitialContext() call to its 
//own context (where your DataSource is located). 
DataSource ds = ctx.lookup("jndi/mydb") 

あなたはds.getConnection(ような単純などこにでもとのgetConnectionこのデータソースを渡すことができます)、(それをプールし、再利用されますので)それを閉じることはありません。

P.S.接続を取得する方法としてDriverManagerを使用することは、パフォーマンスとスケーラビリティの要件がない小型コンソールアプリケーションに適しています。

+0

これはjava EEではありません。これはstandaloneです – user962206

2

います。 接続プールを使用している場合は、通常、プールからリクエストして、完了後にプールに戻ります。

ほとんどの場合、接続オブジェクトは短期間であり、1回のトランザクションでのみ使用されます。 開いている接続ではDBリソースが束縛されており、必要以上にこれらを開いたままにしたくない場合があります。 これらのオブジェクトを他のオブジェクトの周りに通すことを止めることは何もありませんが、注意してください。

関連する問題