通过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);
		}








  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值