欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle自带连接池使用(转载收录) 博客分类: 数据库ORACLEJava相关编程相关 oracle连接池

程序员文章站 2024-03-24 10:55:22
...
最近在搞数据迁移:从sql server 迁数据到oracle。

其中sql server在本地,oracle在远程数据库服务器。

用jdbc写了段代码连接两个库,转数据。

连oracle时用了一个jdbc连接,速度很慢。

想了下用数据库连接池。

为何不直接使用 Oracle 提供的连接池实现(转载收录)
http://unmi.cc/use-oracle-carried-connection-pool/
Oracle自带连接池应用
http://shihuan830619.iteye.com/blog/1162300

上代码,看main
package com.zas.test.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;
import javax.sql.PooledConnection;

import oracle.jdbc.pool.OracleConnectionCacheImpl;
import oracle.jdbc.pool.OracleConnectionPoolDataSource;

/**
 * Oracle自带连接池应用
 * */
public class OraclePooled {

	private static PooledConnection dbpool;
	
	public OraclePooled(String ConnectionURL, String UserName, String PassWord) {
		try {
			OracleConnectionPoolDataSource ocpds = new OracleConnectionPoolDataSource();
			ocpds.setURL(ConnectionURL);
			ocpds.setUser(UserName);
			ocpds.setPassword(PassWord);
			dbpool = ocpds.getPooledConnection();
		} catch (Exception ex) {
			System.err.println("Error in PooledSQL-construct: ");
			ex.printStackTrace(System.err);
		}
	}
	
	protected void finalize() { 
		if(dbpool != null) { 
			try { 
				dbpool.close(); 
	        } catch(Exception ex){    
	        	ex.printStackTrace();       
	        } 
	    } 
	}
	
	public ResultSet Query(String sql, String[] params){ 
		PreparedStatement pstmt = null; 
	    ResultSet rs = null; 
	    Connection connection = null; 

	    try { 
	        connection = dbpool.getConnection(); 
	        pstmt = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
	        for(int i=1; i<params.length+1; i++){
	        	pstmt.setString(i, params[i-1]);
	        }
			rs = pstmt.executeQuery();
			while(rs.next()){
		    	System.out.println(rs.getString(1));
		    	System.out.println(rs.getString(2));
		    }
	    } catch(Exception ex) { 
	        System.err.println("Error in Query - SQLBean: "); 
	        ex.printStackTrace(System.err); 
	    } 

	    return rs; 
	}
	/**
	 * 创建一个 DataSource
	 * 直接使用 OracleConnectionCacheImpl
	 * @throws SQLException
	 */
	public static DataSource createDataSource() throws SQLException
	{
	    OracleConnectionCacheImpl occi = new OracleConnectionCacheImpl();
	    occi.setURL("jdbc:oracle:thin:@10.128.38.2:1521:sr3");
	    occi.setUser("qatest");
	    occi.setPassword("qatest");
	    occi.setMinLimit(2);  //最小连接数
	    occi.setMaxLimit(10); //最大连接数
	    return occi;
	}
	
	public static void main(String[] args) throws SQLException{
		DataSource dataSource = OraclePooled.createDataSource();
		Connection connection = dataSource.getConnection();
		String sql = "select 1 from dual";
		PreparedStatement pstmt = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
		ResultSet rs = pstmt.executeQuery();
		while(rs.next()){
	    	System.out.println(rs.getString(1));
	    }
	}
}


相关标签: oracle 连接池