자바 개발 기초(3)-JDBC 연결 풀

9258 단어 Java
글 목록
프롤로그
흔히 볼 수 있 는 연결 탱크DBCP 연결 풀C3P 0 연결 풀총화
링크 주소
머리말
데이터베이스 연결 이 매우 비싸다.데이터베이스 와 의 연결 을 가 져 옵 니 다.전체 시스템 은 뒤에서 자원 을 소모 하 는 일 을 많이 해 야 합 니 다.대부분의 경우 sql 문 구 를 실행 하 는 것 보다 연결 을 만 드 는 시간 이 더 깁 니 다.그래서 자바 는 직접 연결 을 만 드 는 방식 대신 연결 탱크 체 제 를 사용 했다.
흔 한 연결 풀
자바 는 데이터베이스 연결 탱크 에 공공 인 터 페 이 스 를 제공 합 니 다:javax.sql.dataSource,각 업 체 는 자신의 연결 탱크 가 이 인 터 페 이 스 를 실현 하도록 해 야 합 니 다.이렇게 하면 응용 프로그램 은 서로 다른 제조 업 체 의 연결 탱크 를 편리 하 게 전환 할 수 있 습 니 다!주:
  • 구동 은 데이터베이스 업 체 가 제공 하 는 것 으로 자바 의 JDBC 인터페이스 에 대한 실현 이다
  • 연결 풀 은 데이터베이스 업 체 가 제공 하 는 것 이 아니다.예 를 들 어 DBCP 는 Apache 가 제공 하 는 것 이 고 C3P 0 연결 풀 은 오픈 소스 프로젝트 로 각 업 체 가 자바 가 제공 하 는 Basic DataSource 인 터 페 이 스 를 실현 하여 각종 연결 풀 을 연결 해 야 한다

  • 연결 탱크 는 등록 구동 과 연결 두 부분 기능 을 실현 합 니 다.
    DBCP 연결 풀
  • jar 패키지 추가:comons-dbcp-1.4.jar 와 comons-pool-1.5.6.jar Apache 홈 페이지 의 다운로드 주소
  • 속성 설정 파일 dbcpconfig.properties 추가(이 파일 의 이름 은 마음대로 수정 할 수 있 습 니 다)
  • 방식 1:dbcpconfig.properties 는 현재 프로젝트 의 루트 디 렉 터 리 에서 사용 합 니 다.
    Properties ps = new Properties();
    ps.load(new FileInputStream("dbcpconfig.properties"));
    

    방식 2:dbcpconfig.properties 가 src 디 렉 터 리 에서 사용 할 때
    //	    
    ps.load(DBCPUtils02.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"));
    

    작성 도구 클래스
  • DBCPUtils.java
  • import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    import javax.sql.DataSource;
    
    import org.apache.commons.dbcp.BasicDataSourceFactory;
    
    public class DBCPUtils {
    	//       :         
    	private static DataSource ds = null;
    	
    	//     ,  ds     
    	static{
    		Properties ps = new Properties();
    		try {
    			// dbcpconfig.properties           
    //			ps.load(new FileInputStream("dbcpconfig.properties"));
    			// dbcpconfig.properties src      	    
    			ps.load(DBCPUtils02.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"));
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}	
    		
    		try {
    			ds = BasicDataSourceFactory.createDataSource(ps);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    		
    	public static Connection getConnection() throws SQLException{
    		//        ,   DriverManager  ,        
    		return ds.getConnection();
    	}
    		
    	//           
    	public static void closeAll(Connection conn, Statement st, ResultSet rs){
    		//    
    		if(conn != null){
    			try {
    				conn.close();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		if(st != null){
    			try {
    				st.close();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		if(rs != null){
    			try {
    				rs.close();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    
    }
    
  • DBCPUtilsTestDemo.java
  • import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class DBCPUtilsTestDemo {
    	public static void main(String[] args) throws SQLException {
    //		insert();
    //		update();
    		query();
    	}
    	
    	public static void insert() throws SQLException{
    		// 1.    
    		Connection conn = DBCPUtils.getConnection();
    		// 2.      
    		String sql = "insert into users (username,passwd) values (?, ?)";
    		PreparedStatement pst = conn.prepareStatement(sql);
    		pst.setObject(1, "coco");
    		pst.setObject(2, "2426");
    		// 3.    
    		int rows = pst.executeUpdate();
    		System.out.println(rows);
    		DBCPUtils.closeAll(conn, pst, null);
    	}
    
    	public static void update() throws SQLException{
    		// 1.    
    		Connection conn = DBCPUtils.getConnection();
    		// 2.      
    		Statement st = conn.createStatement();
    		// 3.  sql
    		int rows = st.executeUpdate("update users set passwd = 'co' where uid = 6");
    		System.out.println(rows);
    		DBCPUtils.closeAll(conn, st, null);
    	}
    
    	public static void query() throws SQLException{
    		// 1.    
    		Connection conn = DBCPUtils.getConnection();
    		// 2.      
    		Statement st = conn.createStatement();
    		// 3.    
    		ResultSet rs = st.executeQuery("select * from users where username = 'coco'");
    		// 4.     
    		while(rs.next()){
    			System.out.println(rs.getObject("uid") + "\t" + rs.getObject("username") + "\t"
    					+ rs.getObject("passwd"));
    		}
    		DBCPUtils.closeAll(conn, st, rs);
    		
    	}
    }
    
  • dbcpconfig.properties
  • #     ,     
    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/db02
    username=root
    password=root
    
    #
    initialSize=10
    
    #      
    maxActive=50
    
    #
    maxIdle=20
    
    #
    minIdle=5
    
    #
    maxWait=60000
    
    
    #JDBC                        :[   =property;] 
    #  :"user"   "password"            ,           。
    connectionProperties=useUnicode=true;characterEncoding=utf8
    
    #                 (auto-commit)  。
    defaultAutoCommit=true
    
    #driver default                (read-only)  。
    #        , “setReadOnly”       。(            , :Informix)
    defaultReadOnly=
    
    #driver default                  (TransactionIsolation)。
    #        :(    javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
    defaultTransactionIsolation=REPEATABLE_READ
    

    C3P 0 연결 탱크
    사용 절차:
    jar 패키지 c3p0-0.9.1.2.jar mchange-commons-java-0.2.11.jar c3p 0 다운로드 주소 추가
  • 설정 파일 c3p0-config.xml 을 작성 합 니 다.src 에 있 는 ComboPooledDataSource 대상 은 c3p0-config.xml 파일 을 자동 으로 불 러 오기 때문에 c3p 0 을 사용 할 때 이 파일 의 이름 을 마음대로 수정 할 수 없습니다

  • 작성 도구 클래스
  • C3P0Utils.java
  • /**
     *  C3P0        javax.sql.DataSource      :
     * 		ComboPooledDataSource
     */
    
    import java.beans.PropertyVetoException;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class C3P0Utils {
    
    	private static ComboPooledDataSource ds = new ComboPooledDataSource();	
    	//     C3P0-config.xml  
    	// static              
    	static{
    
    	}
    	
    	public static Connection getConnection() throws SQLException{
    		//     , C3P0     
    		return ds.getConnection();
    	}
    	
    	//            
    	public static void closeAll(Connection conn, Statement st, ResultSet rs){
    		//    
    		if(conn != null){
    			try {
    				conn.close();		//     ,       
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		if(st != null){
    			try {
    				st.close();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		if(rs != null){
    			try {
    				rs.close();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}	
    }
    
    
  • C3P0UtilsTestDemo.java
  • import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class C3P0UtilsTestDemo {
    
    	public static void main(String[] args) throws Exception {
    //		insert();
    //		delete();
    		query();
    	}
    	
    	public static void insert() throws Exception{
    		//1.    
    		Connection conn = C3P0Utils.getConnection();
    		//2.      
    		Statement st = conn.createStatement();
    		//3.  sql
    		int rows = st.executeUpdate("insert into users (username, passwd) values ('lanna', 'summer')");
    		System.out.println(rows);
    		//4.    
    		C3P0Utils.closeAll(conn, st, null);
    	}
    	
    	public static void delete() throws SQLException{
    		//1.    
    		Connection conn = C3P0Utils.getConnection();
    		//2.      
    		String sql = "delete from users where username = ?";
    		PreparedStatement pst = conn.prepareStatement(sql);
    		pst.setObject(1, "coco");
    		int rows = pst.executeUpdate();
    		System.out.println(rows);
    		// 4.    
    		C3P0Utils.closeAll(conn, pst, null);
    	}
    	
    	public static void query() throws SQLException{
    		//1.    
    		Connection conn = C3P0Utils.getConnection();
    		//2.      
    		String sql = "select * from users";
    		PreparedStatement pst = conn.prepareStatement(sql);
    	
    		ResultSet rs =  pst.executeQuery();
    		while(rs.next()){
    			System.out.println(rs.getObject("uid")+"\t"+rs.getObject("username")
    					+"\t"+rs.getObject("passwd"));
    		}
    		// 4.    
    		C3P0Utils.closeAll(conn, pst, rs);
    	}
    }
    
  • c3p0-config.xml
  • 
    
      
        com.mysql.jdbc.Driver
        jdbc:mysql://localhost:3306/db02
        root
        root
        10
      
    
    

    총결산
    본 고 는 JDBC 의 두 가지 연결 풀 DBCP 와 C3P 0 을 소개 한다.코드 가 많이 봉 해 져 있어 서 일부 못 알 아 봐 도 쓸 수 있 지만 좀 힘 들 어 요.예전 에 C 언어 를 많이 봤 나 봐 요.
    링크 주소
    Apache 홈 페이지 다운로드 주소 c3p 0 다운로드 주소

    좋은 웹페이지 즐겨찾기