2011-12-07 2 views
2

JDBC로 작업하고 있는데, 실제로 다른 객체에 연결 코드를 어떻게 전달합니까? 그래서 코딩을 계속하는 번거 로움이별로 없으며 데이터베이스 연결을 닫아야 할 경우 다른 객체를 만들어야합니까 ?? 여기 내 코드는 일반적으로, 필요에 따라 연결을 얻을 당신의 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에서는 관리 콘솔을 사용할 수 있음). 서버는이 풀 (DataSource를 통해)을 지정한 JNDI 이름 (예 : "jndi/mydb")에 바인딩합니다.

그래서 코드의 연결이 매우 간단 점점 :

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. 연결을 얻는 방법으로 DriverManager을 사용하면 성능 및 확장 성 요구 사항이없는 소형 콘솔 응용 프로그램에 적합합니다.

+0

이것은 Java EE가 아니며, 독립 실행 형입니다. – user962206

2

것입니다. 연결 풀을 사용하는 경우 일반적으로 풀에서 요청하고 완료되면 풀로 돌아갑니다.

대부분의 경우 연결 개체는 단기적이며 단일 트랜잭션에만 사용됩니다. 열려있는 연결은 DB 리소스를 묶어 놓고 필요 이상으로 열어두기를 원하지 않습니다. 다른 물건 주위로 이것을 통과하는 것을 막을 수는 없지만 조심해야합니다 ...

관련 문제