很厉害的一个数据库连接工具类
来源:互联网 发布:李氏筋骨散淘宝 编辑:程序博客网 时间:2024/04/30 10:16
package Homework.utils;import java.io.IOException;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.List;import java.util.Properties;import org.apache.commons.dbcp2.BasicDataSource;/** * DBCP数据库连接工具类 * 依赖 * 1.mysql驱动 * 2.dbcp相关插件 * @author mrchai * */public class DBUtils {//连接数据库基本属性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;//数据源private static BasicDataSource bds;//初始化数据源配置static{init();}public static void init(){try {//创建数据源对象bds = new BasicDataSource();//加载属性文件,获取属性信息Properties props = new Properties();props.load(DBUtils.class.getResourceAsStream("jdbc.properties"));driverClass = props.getProperty("driver");url = props.getProperty("url");username = props.getProperty("user");password = props.getProperty("password");initSize = Integer.parseInt(props.getProperty("initSize"));maxSize = Integer.parseInt(props.getProperty("maxSize"));maxIdle = Integer.parseInt(props.getProperty("maxIdle"));maxWait = Long.parseLong(props.getProperty("maxWait"));//设置驱动类路径bds.setDriverClassName(driverClass);//设置urlbds.setUrl(url);//设置用户名bds.setUsername(username);//设置密码bds.setPassword(password);//设置初始连接数bds.setInitialSize(initSize);//设置最大连接bds.setMaxTotal(maxSize);//设置最大闲置连接数bds.setMaxIdle(maxIdle);//等待获取连接的最大时间(MS)bds.setMaxWaitMillis(maxWait);} 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 stat,Connection conn){try {if(rs != null) rs.close();if(stat != null) stat.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;}/** * C++钩子函数 回调函数 * 集合查询 * @param sql * @param call * @param params * @return */public static <T> List<T> queryList(String sql,CallBack<T> call,Object...params){Connection conn = DBUtils.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;}/** * 查询一条记录 * @param sql * @param call * @param params * @return */public static <T> T queryOne(String sql,CallBack<T> call,Object...params){Connection conn = DBUtils.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支持//public interface CallBack<T>{//default List<T> getDatas(ResultSet rs){//return null;//}//default T getData(ResultSet rs){//return null;//}//}//jdk1.8以下使用抽象类public static abstract class CallBack<T>{public List<T> getDatas(ResultSet rs){return null;}public T getData(ResultSet rs){return null;}}}
这个类是一个工具类,用于连接数据库以及一些对数据库表的增删改查的方法。
DBCP数据库连接:前半部分是对数据库的连接,由于连接的数据库类型、哪个数据库、用户名、密码这些都是不确定的,所以将这些不确定的元素写入属性文件。如果需要更改、直接改属性文件中的内容即可修改。
增删改:对表的增删改的方法是类似的,所以可以将其封装为一个方法。该方法的重点在于object ...objs,定义这个参数后传入方法中的参数的个数可以自己决定(参数不写也可以),这样就能够解决传入参数个数不同的问题。
查:由于对表的查询时,返回的值得个数不同,可能是个对象,可能是对象的集合,所以返回值不同。那么就必须写两个方法,一个返回对象,一个返回集合。但由于对象是不确定的,返回的东西该怎么存进对象。这时候就用到了钩子函数(回调函数),调用者调用钩子函数自己实现后再传给方法,方法再返还给调用者,从而实现对重复代码的封装,这就是低耦合高内聚。
阅读全文
0 0
- 很厉害的一个数据库连接工具类
- 连接数据库的一个工具类
- 一个连接数据库的工具类(JDBC)
- 自己写一个数据库连接工具类
- 如何成为一个很厉害的人
- 一个很厉害的sql查询(mysql)
- 连接数据库的工具类
- 连接数据库工具类
- 使用连接池的数据库工具类
- java连接数据库的工具类
- jdbc连接MySQL数据库的工具类
- 项目中连接数据库的工具类
- java连接数据库的工具类
- 两个JDBC连接数据库的工具类
- 编写连接数据库的工具类
- 连接mysql数据库的工具类
- 看到一个很厉害的博客,感慨一下
- 读《精进 如何成为一个很厉害的人》
- 认识工作流框架
- Create-React-App创建antd-mobile开发环境
- spring cloud
- 测试基础知识
- HDU-3401:Trade(dp+单调队列优化)
- 很厉害的一个数据库连接工具类
- struts2页面下载,从数据库把数据以excel表格形式导出
- POSIX多线程程序设计学习篇之一(线程管理)
- Vitamio 的导入过程
- Hibernate和Mybatis对比(优缺点)
- linux 下卸载PHP
- C语言之指针篇
- 【正一专栏】共享单车那些事儿
- Linux 进程管理