이 기사의 예는 Java의 데이터베이스 연결 풀 방법을 알려줍니다. 참조를 위해 모든 사람을 위해 공유하십시오. 세부 사항은 다음과 같습니다.
com.ka.sql.sql.databasemetadata; java.util.enumeration java.util.vector; IS // null. 그 안에 저장된 개체는 pooledconnection public void setparam (connectionparam param) {this.param = param; ConnectionParam Param) {this.param = param;} / ** * * 테스트 데이터베이스 테이블 테스트 테스트 테이블 테이블의 이름을 얻으십시오. 테스트 테이블의 이름 * * * @param testable * 문자열 테이블 테이블 이름 * / public voidTettable (String testTable) {this.testtable = testTable;} / ** * 创建一个数据库连接池, 连接池中的可用连接的数量采用类成员 초기 연결 con*/ public synchronized void createpool ()은 예외를 던져 {// 确保连接池没有创建 // 如果连接池己经 생성 된 저장 벡터 연결이 비어 있지 않습니다. ) {return; ret습니다. )); DriverManager (Driver); 초기 연결에 설정됩니다. CreateConnections (this.param.getMinconConnection ()); "데이터베이스 연결 풀 생성이 성공적으로!");} /** * *. * * * @param numconnection * 생성 할 데이터베이스 수 */ private void createConnection (int numconnections)은 sqlexception {// (int x = 0; x <numconnections; x ++에 대한 지정된 데이터베이스 연결 수를 만듭니다. ) { / / / 풀에 연결되는 데이터베이스 수가 최대에 도달 했습니까? 최대 값은 maxconnections에 의한 것입니다. maxConnections //가 0이거나 음수 인 경우 연결 수에는 제한이 없음을 의미합니다. // 연결 횟수가 최대에 도달하면 출구가 철회됩니다. if (this.param.getMaxConnection ()> 0 && this.connections.size ()> = this.param.getMaxConnection () {break;} // 연결 벡터 vector // 연결에 하나의 연결을 추가하십시오. 풀 (벡터 연결에서), try {connections.addelement (new PooledConnection (newConnection ());} 새 sqlexection ();} system.out.println ( "데이터베이스 연결 작성하려면 ... ");}/ ** * * 새 데이터베이스 연결을 생성하고이를 * * rturn으로 반환하고 새 새로운 데이터베이스 연결 */ private connection newConnection () sqlexception {// 데이터베이스 생성 연결에 연결 Conn = DriverManager.getConnection (this.param.getUrl (), this.param.getUser (), this.param.getPassword ()); , 데이터베이스를 확인 하고이 데이터베이스에서 허용하는 고객 연결 수를 얻으려면 // connections.size () == 0은 (연결에 대한 연결. = 0) {databasemetadata metadata = int drivermaxconnection = metadata.getMaxConnection (); 한계는 알려져 있지 않습니다. // drivermaxConnections는 반환하는 정수이며, 연결 풀의 연결 수는 고객이 if (drivermaxConnection> 0 && param.getMaxConnection ()> drivermaxConnection (drivermaxConnection (drivermaxConnection S))에 연결할 수 있음을 나타냅니다. ;}} conn; // 생성 된 새 데이터베이스 연결로 돌아 가기} /** * * getFreeConnection () 함수를 호출하여 사용 가능한 데이터베이스 연결이없고 더 많은 데이터베이스 연결이있을 수 없습니다. 구축하기 위해 * * * * 다시 얻으려고 노력하십시오. * * @return 사용 가능한 데이터베이스 연결 객체를 반환 */ public synchronized connection getConnection () sqlexception {// 연결 chi ji가 (connection == null)을 만들어야합니다 아직 생성 된 다음 return null} connection conn = getFreeConnection (); 대기 (250); getFreeConnection (); // 사용 가능한 연결을 반환}/** * * *이 함수는 연결된 풀 벡터 연결에서 사용 가능한 데이터베이스 연결을 반환합니다. * * * * * * * * * * * * * 여러 데이터베이스 연결을 생성하여 연결 풀에 넣습니다. * * 모든 연결이 여전히 사용중인 경우 return null * * * @return 사용 가능한 데이터베이스 연결을 반환 */ private conneconnection () sqlexception {// 연결 풀 연결에서 사용 가능한 데이터베이스 연결을 얻습니다. conn = findFreeConnection (); if (conn == null) {// 현재 연결 풀에 연결되지 않은 경우 // 연결 CreateConnection (this.param.getIncremenections ()); () = FindFreeConnection (); IF (Conn == NULL) {// 연결이 생성 된 후에도 사용 가능한 연결을 얻을 수 없으면 NULL RETURN NULL을 반환합니다 사용 가능한 데이터베이스 연결, 사용 가능한 연결이 없으면 NULL을 반환하십시오 연결 풀 벡터 열거 = Connections (); 이 객체는 바쁘지 않으며 데이터베이스 연결을 가져 와서 바쁜 Conn = PCONN.GETCONNECTION ()로 설정하십시오. , 새 연결을 만들고, 이용할 수없는 연결 객체를 교체하십시오. 연결! " + e.getMessage ()); return null;} pconn.setConnection (conn);} break; // 사용 가능한 연결을 찾으십시오. exit}} return conn; // 사용 가능한 연결을 찾으려면}/ * * * * * 연결을 사용할 수 없는지 테스트하십시오. 끄고 False * *로 돌아갑니다. *Rturn Return True를 사용 하여이 연결을 사용할 수 있음을 나타냅니다. False*/ Private Boolean TestConnection (Connection Conn) {Try {// 테스트 테이블이 존재하는지 여부를 결정합니다. {// 테스트 테이블이 비어있는 경우이 연결된 setAutoCommit ()) 메소드를 사용하여 연결을 사용할 수 있는지 확인하십시오 (이 메소드는 사용할 수없는 경우 일부 데이터베이스에서만 사용할 수 있습니다. // 예외를 던지십시오. ). 참고 : 테스트 테이블을 사용하는 방법은 더욱 신뢰할 수 있습니다. conn.createstatement (); (conn); return retrance retract true reture true; returnconnection (Connection Conn) {// 연결 풀이 생성되지 않은 경우 (Connections == NULL) {System.out.println ( "연결 풀이 존재하지 않습니다. , 그리고 그것은 연결 풀에서 연결에 대한 연결에 대한 연결에 대한 연결에 반환 될 수 없습니다. "; return;} pooledconnection pconn = null; 연결 연못의 연결은 연결 객체를 찾으십시오 (enumeate.hasmo reelements ()) {pconn = (pooledConnection) enumerate.nextElement (); = pconn.getConnection ()) {//이 연결을 유휴 상태 PCONN.SETBUSY (FALSE)로 설정하십시오. 동기화 된 void refreshconnections ()는 sqlexception {// 연결 풀 혁신이 존재하는지 확인합니다 (C. onnection == null) {System.out.println ( "연결 풀이 존재하지 않으면 새로 고칠 수 없습니다!"); } pooledConnection PCONN = NULLENGENTENTE () {// 객체가 5 초 동안 바쁘다. ponn.isbusy ()) {대기 (5000); //이 연결은 새 연결로 대체됩니다. CloseConnection (pconn.getConnection ()); pconnection ();} /** * * 연결 풀의 모든 연결. */ public synchronized void closeConnectionPool ()는 sqlexception {// 연결 풀이 존재하지 않으면 (connection == null) {system.out.println ( "닫을 수 없습니다!"); return;} plyedconnection pconn = enumerate = while (enumerate.hasmorements ()). )) {대기 (5000); // 5 초 후에는 CloseConnection (pconn.getConnection ())을 닫습니다. 연결 풀은 빈 연결 = null;} / **** 데이터베이스 연결 ** @param 데이터베이스 연결* / private void closeConnection (Connection Continuity) {try {conn.close ();} catc e) {System.out.println ( "데이터베이스 연결 오류를 닫으십시오 :" + e.getMessage ());} /**** 프로그램이 주어진 밀리 초에 대해 기다리도록합니다 ** @param 주어진 숫자가 주어지면* / private void wain (int mseconds) {try {thread.sleep (mseconds);} catch (InterpruptedException e) {} / ** * * 연결 풀에 연결된 객체를 저장하기위한 내부 사용 데이터베이스와 다른 하나는 연결이 사용되고 있다는 표시입니다. */ Connection Connection = NULL; } // 공개 연결로 돌아 가기 getConnection () {return connection;} // 공개 음성 ection (연결 연결) {this.connection = connection}; isbusy () {return busy;} // 설정 객체의 연결은 바쁘다
이 기사는 모든 사람의 Java 프로그램 설계에 도움이되기를 바랍니다.