JDBC入门(二)工具类封装

来源:互联网 发布:金山恢复数据在哪里 编辑:程序博客网 时间:2024/05/16 17:15
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);//设置urlbds.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的增删改查操作就十分方便了。就算换用不同的数据库,也只需要修改配置文件就可以。



原创粉丝点击