JDBC入门(二)工具类封装

public class DBUtils {

	//数据源
	private static BasicDataSource bds;
	//连接数据库基本属性
	private static String driverClass;
	private static String url;
	private static String username;
	private static String password;
	//连接池属性
	private static int initSize;
	private static int maxSize;
	private static int maxIdle;
	private static long maxWait;

	//初始化数据源配置
	static {
		init();
	}
	
	public static void init(){
		try {
			// 创建数据源对象
			bds = new BasicDataSource();
			//加载属性文件,获取属性信息
			Properties pros = new Properties();
			pros.load(DBUtils.class.getResourceAsStream("jdbc.properties"));
			driverClass = pros.getProperty("driver");
			url = pros.getProperty("url");
			username = pros.getProperty("user");
			password = pros.getProperty("password");
			
			initSize = Integer.parseInt(pros.getProperty("initSize"));
			maxSize = Integer.parseInt(pros.getProperty("maxSize"));;
			maxIdle = Integer.parseInt(pros.getProperty("maxIdle"));;
			maxWait = Long.parseLong(pros.getProperty("maxWait"));
				
			//设置驱动类路径
			bds.setDriverClassName(driverClass);
			//设置url
			bds.setUrl(url);
			//设置用户名
			bds.setUsername(username);
			//设置密码
			bds.setPassword(password);
				
			//设置初始连接数
			bds.setInitialSize(initSize);
			//设置最大连接数
			bds.setMaxTotal(maxSize);
			//设置最大闲置连接数
			bds.setMaxIdle(maxIdle);
			//设置最大等待连接时间(ms)
			bds.setMaxWaitMillis(maxWait);
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//获取连接
	public static Connection getConn(){
		try {
			if(bds == null || bds.isClosed()){
				init();
			}
			return bds.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	//封装资源回收的方法
		public static void close(ResultSet rs,Statement stmt,Connection conn){
			try {
				if(rs != null) rs.close();
				if(stmt != null) stmt.close();
				if(conn != null) conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		/**
		 * 更新操作
		 * @param conn
		 * @param sql
		 * @param objs
		 * @return
		 */
		public static boolean execUpdate(Connection conn,String sql,Object...objs){
			try {
				PreparedStatement ps = conn.prepareStatement(sql);
				for (int i = 0; i < objs.length; i++) {
					ps.setObject(i+1, objs[i]);
				}
				 int i = ps.executeUpdate();
				 return i > 0 ? true : false;
			} catch (SQLException e) {
				e.printStackTrace();
			}
			return false;
		}
		
		/**
		 * 查询操作
		 * 泛型方法,使参数可以添加泛型
		 */
		public static <T> List<T> queryList(String sql,CallBack<T> call,Object ...params){
			Connection conn = getConn();
			PreparedStatement ps = null;
			try {
				ps = conn.prepareStatement(sql);
				for (int i = 0; i < params.length; i++) {
					ps.setObject(i+1, params[i]);
				}
				ResultSet rs = ps.executeQuery();
				return call.getDatas(rs);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			return null;
		}
		
		public static <T> T queryOne(String sql,CallBack<T> call,Object ...params){
			Connection conn = getConn();
			PreparedStatement ps = null;
			try {
				ps = conn.prepareStatement(sql);
				for (int i = 0; i < params.length; i++) {
					ps.setObject(i+1, params[i]);
				}
				ResultSet rs = ps.executeQuery();
				return call.getData(rs);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			return null;
		}
		
		//查询返回接口
		//JDK1.8 default方法
//		public interface CallBack<T>{
//			default List<T> getDatas(ResultSet rs){
//				return null;
//			};
//			default T getData(ResultSet rs){
//				return null;
//			};
//		}
		
		//若JDK版本低,使用静态抽象方法
		public static abstract class CallBack<T>{
			public List<T> getDatas(ResultSet rs){
				return null;
			}
			public T getData(ResultSet rs){
				return null;
			}
		}
}


有了这个封装工具类,数据库的连接,配置,以及JDBC的增删改查操作就十分方便了。就算换用不同的数据库,也只需要修改配置文件就可以。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值