通過jdbc創建連接池連接數據庫

一、導入相關jar包

ojdbc14.jar(Oracle用的) 或 mysql-connector-java-5.1.17.jar(mysql用的)、jsonplugin-0.34.jar(業務中封裝數據用到,可生成json格式的數據)、commons-pool-1.5.5.jar、commons-dbcp-1.4.jar、額外的幾個jar包:commons-logging-1.1.3.jar、commons-io-2.4.jar、commons-fileupload-1.3.1.jar、log4j-1.2.17.jar


二、數據庫配置文件 dbconfig.properties

url=jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf-8
driverClassName=com.mysql.jdbc.Driver
username=root
password=dap1234$
#連接池啟動時創建的初始化連接數
initialSize=10
#連接池在同一時間能夠分配的最大活動連接的數量
maxActive=30
#最大空閒連接,超過的將被釋放
maxIdle=10
#最小空閒連接,低於之將創建新的連接
minIdle=5
#當沒有可用連接時,連接池等待連接被歸還的最大時間,超時則拋異常
#(比如debug時佔着連接不放,正常情況下業務處理完後即會釋放當前使用的連接)
maxWait=10000
#用來驗證從連接池中取出的連接
validationQuery=select current_date()
#當下面兩個參數都為true時表示會在每次請求之前和之後進行連接池測試,如果
#連接失效(比如mysql默認8小時後服務器自動斷開該連接)就會銷燬之並創建一個新的連接對象,
#但此次的數據庫操作也就失敗了,可能會對寫操作有影響
#使用時一定要配置validationQuery參數纔有效
testOnBorrow=false
testOnReturn=false
#指明連接是否被空閒連接回收器進行檢驗,如果檢測失效則連接將被從池中去除
testWhileIdle=true
#超過180秒後,是否進行沒用連接(廢棄)的回收(默認爲false)
removeAbandoned=true
#超過時間限制,回收沒有用(廢棄)的連接(默認爲 300秒)
removeAbandonedTimeout=180
#標記當Statement或連接被泄露時是否打印程序的stack traces日誌
logAbandoned=false
#每過30000毫秒對連接池進行一次檢測,將對象閒置時間超過1800000毫秒的對象進行銷燬,
#並創建新的對象來替代。這樣就能保證時刻都有正常的連接池對象存在
timeBetweenEvictionRunsMillis=300000
#回收線程(空閒連接回收器線程)運行時檢查的連接數量
numTestsPerEvictionRun=5
#連接在池中保持空閒而不被回收的最小時間值
minEvictableIdelTimeMillis=3600000


三、創建工具類供創建並獲取連接,關閉連接

import java.io.InputStream;
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 BaseDao {

	private static DataSource ds = null;
	static{
		try {
			InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("dbconfig.properties");
			Properties prop = new Properties();
			prop.load(is);
			ds = BasicDataSourceFactory.createDataSource(prop);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public Connection getConn() throws SQLException{
		return ds.getConnection();
	}

	public void closeAll(Connection conn,Statement state,ResultSet set){
		try {
			if(set!=null){
				set.close();
			}
			if(state!=null){
				state.close();
			}
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


附上不用連接池單個連接樣例:

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
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 BaseDao {

	/*public static final String DRIVER="oracle.jdbc.driver.OracleDriver";
	public static final String URL="jdbc:oracle:thin:@10.43.139.205:1521:senti";
	public static final String USERNAME="owluser";
	public static final String PWD="owl1qaz";*/

	public static final String DRIVER="com.mysql.jdbc.Driver";
	public static final String URL="jdbc:mysql://10.43.165.151:3306/ontylogy?useUnicode=true&characterEncoding=utf-8";
	public static final String USERNAME="root";
	public static final String PWD="mysql180";

	

	public Connection getConn() throws ClassNotFoundException, SQLException{
		Class.forName(DRIVER);
		Connection conn=DriverManager.getConnection(URL, USERNAME, PWD);
		return conn;		
	}

	public void clossAll(Connection conn,Statement state,ResultSet rs){
		try {
			if(rs!=null){
				rs.close();
			}
			if(state!=null){
				state.close();
			}
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}	
}


四、服務層創建服務類需要繼承上面的工具類,以便調用連接池中的連接,並查詢結果    

		Connection conn=null;
		Statement state=null;
		ResultSet rs=null;
		Map<String, Object> map=new HashMap<String, Object>();
		try {
			conn=getConn();
			state=conn.createStatement();
			rs=state.executeQuery(sql);
			if (rs.next()) {
				map.put("pwd", rs.getString("upassword"));
				map.put("right", rs.getInt("uright"));
				//result=JSONUtil.serialize(map);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			closeAll(conn, state, rs);
		}








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章