2012-06-12 2 views
0
ComboPooledDataSource cpds = new ComboPooledDataSource(); 
cpds.setDriverClass("com.mysql.jdbc.Driver"); //loads the jdbc driver 

cpds.setJdbcUrl("jdbc:mysql://localhost:3306/dragon"); 
cpds.setUser("root"); 
cpds.setPassword("password"); 
cpds.setMaxPoolSize(50); 

다음 코드가 포함 된 java 파일을 작성하여 ComboPooledDataSource 객체를 구성했습니다. 이제이 코드는 데이터베이스와 풀링 된 연결을 설정하기에 충분합니까?c3p0 풀링을 사용하여 데이터베이스 mysql을 연결

그렇지 않으면 무엇을해야합니까?

또한 여기에 JNDI를 구현할 수있는 방법을 알려주십시오.

초보자부터 설명해주세요.

+0

은 먼저 ConnectionPoolDataSource에 인터페이스 자바 API가 제공하는 사용하여 연결 풀을 만드는 시도? 초보자로서 나는 그것을 먼저 시도했고 그것은 나의 요구 사항 대부분을 충족시켰다. – Sridhar

+0

대부분의 경우 구현하지 않을 것입니다. 모든 응용 프로그램 서버와 함께 제공됩니다. – Dapeng

+1

아마도 싱글 톤 (singleton)은 데이터 소스를 초기화하여 어디에서나 DAO 클래스로부터 연결을 얻을 수있는 곳이 필요합니다. . – tom

답변

2

먼저 ... UR 서버 작업에 대한 의미 다른 클래스를 생성 완료되면 ..

 private static ComboPooledDataSource cpds = new ComboPooledDataSource(); 
     public static void MakePool() 
     { 
       try 
       { 
       cpds=new ComboPooledDataSource(); 
       cpds.setDriverClass("com.mysql.jdbc.Driver"); 
       cpds.setJdbcUrl("jdbc:mysql://localhost:3306/att_db"); 
       cpds.setUser("root"); 
       cpds.setPassword("dragon"); 
       cpds.setMaxPoolSize(MaxPoolSize); 
       cpds.setMinPoolSize(MinPoolSize); 
       cpds.setAcquireIncrement(Accomodation); 
      } 
      catch (PropertyVetoException ex) 
      { 
       //handle exception...not important..... 
       } 

} 
public static Connection getConnection() 
{ 
      return cpds.getConnection(); 
} 

을 다음과 같이 정적 메소드 또는 변수를 포함하는 클래스의 연결을 시작하는 코드를 작성 ... .

와 풀에서 연결을 얻을

...

  try{ 

       con=DatabasePool.getConnection(); 
       // DatabasePool is the name of the Class made earlier.... 
       . 
       . 
       . 
       . // Server operations as u wanted..... 
       . 
       . 
      } 
      catch(SQL EXCEPTION HERE) 
      { 
        ..... 
      } 
      finally 
      {  
       if(con!=null) 
       { 
         con.close();  
       } 
      } 
+0

정말 연결을 닫아야합니까? 아니면 그냥 풀에 돌려 주어야할까요? – user2602807

0

저는 JNDI에 익숙하지 않으므로 해결하지 않을 것입니다. 목표에 대한 자세한 내용은 별도의 질문을 원하지만, ComboPooledDataSource가 올바르게 구성되어 있다고 생각합니다.

있습니다 (예외가 단순화를 위해 제외 핸들링)과 같은 코드를 사용하여 데이터 소스를 테스트 할 수 있어야한다 :

ArrayList<Object[]> data = new ArrayList<Object[]>(); 

Connection connection = cpds.getConnection(); 
Statement statement = connection.createStatement(); 
ResultSet resultSet = statement.executeQuery("select a_column from a_table;"); 

int columnCount = resultSet.getMetaData().getColumnCount(); 

while (resultSet.next()) { 
    Object[] rowData = new Object[columnCount]; 

    for (int i = 0; i < columnCount; i++) { 
     rowData[i] = resultSet.getObject(i + 1); 
    } 

    data.add(rowData); 
} 
+0

ok ..... 그래서 내가 알고 싶은 것은 ... 내가 처음 언급 한 코드를 만들었다면 ....... 나는 인스턴스 등록에 대해 걱정하지 않고 모든 파일에서 mysql을 실행할 수있다. ... –

+0

예, 연결이 janoside로 표시되는 경우 – Alfabravo

+0

작성한 ComboPooledDataSource를 사용하여 쿼리를 실행해야합니다. 따라서 데이터를 가져 오려는 모든 코드는 "cpds"에 대한 참조를 사용하여 코드를 작성해야합니다 (3 행을 명확히하기 위해 코드를 업데이트했습니다). – janoside

0

당신은 JDBC 연결을 관리하려면 C3P0를 사용하고 JDNI를 사용할 수 없습니다. jndi를 사용하려면 웹 컨테이너에 연결을 설정해야합니다.

<Context> 
    <Resource name="jdbc/springflow" auth="Container" 
     type="javax.sql.DataSource" 
     maxActive="100" maxIdle="30" maxWait="10000" username="root" 
     password="" driverClassName="com.mysql.jdbc.Driver"  
     url="jdbc:mysql://localhost:3306/test" /> 
</Context> 

같은 톰캣 그리고 당신은 context.lookup("java:jdbc/springflow") 같은 JNDI를 사용할 수 있습니다.

에서
관련 문제