zoukankan      html  css  js  c++  java
  • 自定义DbUtils通用类

    本实例使用C3P0连接池做连接,详见https://www.cnblogs.com/qf123/p/10097662.html开源连接池C3P0的使用

    DBUtils.java

     1 package com.qf.util;
     2 
     3 import java.sql.Connection;
     4 import java.sql.ResultSet;
     5 import java.sql.SQLException;
     6 
     7 import com.mchange.v2.c3p0.ComboPooledDataSource;
     8 
     9 import java.sql.Statement;
    10 
    11 public class DBUtils {
    12    
    13     static ComboPooledDataSource ds ;
    14     static {
    15         ds = new ComboPooledDataSource();//创建c3p0连接池数据源
    16     }
    17     
    18     public static Connection getConn() {
    19         Connection conn = null;
    20         try {
    21             conn = ds.getConnection();//从连接池获取数据库连接
    22         } catch (SQLException e) {
    23             e.printStackTrace();
    24         }
    25         return conn;
    26     }
    27 
    28     /*
    29      * 释放资源
    30      */
    31     public static void releaseResource(ResultSet rs,Statement statement,Connection conn) {
    32         closeConnect(conn);
    33         closeResultSet(rs);
    34         closeStatement(statement);
    35     }
    36     public static void releaseResource(Statement statement,Connection conn) {
    37         closeConnect(conn);
    38         closeStatement(statement);
    39     }
    40     private static void closeResultSet(ResultSet rs) {
    41         try {
    42             if(rs != null) {
    43                 rs.close();
    44             }
    45         } catch (SQLException e) {
    46             e.printStackTrace();
    47         }
    48     }
    49     private static void closeStatement(Statement statement) {
    50         try {
    51             if(statement != null) {
    52                 statement.close();
    53             }
    54         } catch (SQLException e) {
    55             e.printStackTrace();
    56         }
    57     }
    58     private static void closeConnect(Connection conn) {
    59         try {
    60             if(conn != null) {
    61                 conn.close();
    62             }
    63         } catch (SQLException e) {
    64             e.printStackTrace();
    65         }
    66     }
    67 }

    ResultSetHandler接口,用于定义处理结果集的方法

    package com.qf.util.dao;
    
    import java.sql.ResultSet;
    
    public interface ResultSetHandler<T> {
    
    	T handle(ResultSet rs);
    }

    自定义通用DbUtils类MyDbUtils.java

    • query方法参数ResultSetHandler就是为了让用户根据实际情况自己定义结果集处理的方法
    • 使用T泛型,灵活返回具体对象
      1 package com.qf.util;
      2 
      3 import java.sql.Connection;
      4 import java.sql.ParameterMetaData;
      5 import java.sql.PreparedStatement;
      6 import java.sql.ResultSet;
      7 import java.sql.SQLException;
      8 import java.util.ArrayList;
      9 import java.util.Date;
     10 import java.util.List;
     11 
     12 import org.junit.Test;
     13 
     14 import com.qf.pojo.Person;
     15 import com.qf.util.dao.ResultSetHandler;
     16 
     17 public class MyDbUtils {
     18     @Test
     19     public void test1() {
     20         Person person = query("select * from person where id=?", new ResultSetHandler<Person>() {
     21 
     22             @Override
     23             public Person handle(ResultSet rs) {
     24                 try {
     25                     if(rs.next()) {
     26                         String address = rs.getString("address");
     27                         Date time = rs.getDate("time");
     28                         int age = rs.getInt("age");
     29                         String name = rs.getString("name");
     30                         Person person = new Person(name , age, time, address);
     31                         return person;
     32                     }
     33                 } catch (SQLException e) {
     34                     e.printStackTrace();
     35                 }
     36                 return null;
     37             }
     38         }, 1);
     39         System.out.println(person);
     40         /**控制台输出结果:
     41          * Person [name=smile, age=12, time=2018-03-06, address=null]
     42          */
     43     }
     44     
     45     @Test
     46     public void test2() {
     47         List<Person> list = query("select * from person", new ResultSetHandler<List<Person>>() {
     48             @Override
     49             public List<Person> handle(ResultSet rs) {
     50                 try {
     51                     List<Person> list = new ArrayList<Person>();
     52                     while(rs.next()) {
     53                         String address = rs.getString("address");
     54                         Date time = rs.getDate("time");
     55                         int age = rs.getInt("age");
     56                         String name = rs.getString("name");
     57                         Person person = new Person(name , age, time, address);
     58                         list.add(person);
     59                     }
     60                     return list;
     61                 } catch (SQLException e) {
     62                     e.printStackTrace();
     63                 }
     64                 return null;
     65             }
     66         });
     67         for (Person person : list) {
     68             System.out.println(person);
     69         }
     70         
     71         /**控制台输出结果:
     72          * Person [name=smile, age=12, time=2018-03-06, address=null]
     73          * Person [name=wxf, age=13, time=2018-03-07, address=null]
     74          * Person [name=smile, age=24, time=1970-01-01, address=null]
     75          */
     76     }
     77     
     78     /**
     79      * 查询
     80      * @param sql
     81      * @param handler    用于处理结果集rs
     82      * @param args    sql中?对应的参数值
     83      * @return
     84      */
     85     public <T> T query(String sql,ResultSetHandler<T> handler, Object ...args){
     86         ResultSet rs = null;
     87         PreparedStatement ps = null;
     88         Connection conn = null;
     89         try {
     90             conn = DBUtils.getConn();
     91             
     92             ps = conn.prepareStatement(sql);
     93             ParameterMetaData metaData = ps.getParameterMetaData();
     94             int count = metaData.getParameterCount();
     95             for (int i = 0; i < count; i++) {
     96                 ps.setObject(i+1, args[i]);
     97             }
     98             rs = ps.executeQuery();
     99             T t = handler.handle(rs);
    100             return t;
    101         } catch (SQLException e) {
    102             e.printStackTrace();
    103         } finally {
    104             DBUtils.releaseResource(ps, conn);
    105         }
    106         return null;
    107     }
    108     
    109     /**
    110      * 增删改
    111      * @param sql
    112      * @param args    sql中?对应的参数值
    113      */
    114     public void update(String sql,Object ...args) {
    115         PreparedStatement ps = null;
    116         Connection conn = null;
    117         try {
    118             conn = DBUtils.getConn();
    119             ps = conn.prepareStatement(sql);
    120             ParameterMetaData metaData = ps.getParameterMetaData();
    121             int count = metaData.getParameterCount();
    122             for (int i = 0; i < count; i++) {
    123                 ps.setObject(i+1, args[i]);
    124             }
    125             ps.executeUpdate();
    126         } catch (SQLException e) {
    127             e.printStackTrace();
    128         } finally {
    129             DBUtils.releaseResource(ps, conn);
    130         }
    131     }
    132     
    133 }
  • 相关阅读:
    C++ 多态性之虚函数&抽象类&纯虚函数
    转帖:iOS UIWindow & UIWindowLevel
    转帖:iOS UINavigationController 对象
    iOS 数据持久化 NSUserDefault
    ----百度地图api----
    ----改写superheros的json以及上传到github----
    ----XMLHttpRequestAPI简单介绍----
    ----event flow----
    ----Arrow functions----
    ----constructor 与 object----
  • 原文地址:https://www.cnblogs.com/qf123/p/10103279.html
Copyright © 2011-2022 走看看