zoukankan      html  css  js  c++  java
  • JDBC工具类

    package jdbc;

    import jdbc.POJO.Person;

    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;

    /**
    * @program: tx_jdbc_demo
    * @description: ResultSet工具类
    * @author: czg
    * @create: 2019-09-29 14:38
    */
    public class ResultSetUtil {


    /**
    * 获得Mysql数据库连接
    * @param url jdbc:mysql://127.0.0.1:3306/数据库名?serverTimezone=GMT%2B8
    * @param userName
    * @param psw
    * @return
    */
    public static Connection getMysqlConnetion(String url,String userName,String psw){
    Connection con=null;
    try {

    //使用发射机制加载mysql数据库的驱动 com.mysql.jdbc.Driver 已经被弃用了
    Class.forName("com.mysql.cj.jdbc.Driver");
    con = DriverManager.getConnection(url, userName, psw);
    return con;
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    }

    /**
    * 获得Oracle数据库连接
    * @param url jdbc:oracle:thin:@localhost:1521:数据库名
    * @param userName
    * @param psw
    * @return
    */
    public static Connection getOracleConnetion(String url,String userName,String psw){
    Connection con=null;
    try {
    //使用发射机制加载oracle数据库的驱动
    Class.forName("oracle.jdbc.driver.OracleDriver");
    con = DriverManager.getConnection(url, userName, psw);
    return con;
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    }

    /**
    * 通过忽略属性的访问权限进行赋值 (所转对象必须存在无参构造方法)
    * @param rs
    * @param cls
    * @param <T>
    * @return
    */
    public static <T> List<T> parseResultSetByField(ResultSet rs, Class<T> cls) {
    List<T> list=new ArrayList<>();
    try {
    //将查询数据转换为对象
    while (rs.next()){
    //实例化对象
    T obj=cls.newInstance();
    //获取类中所有的属性
    Field[] arrf=cls.getDeclaredFields();
    //遍历属性
    for(Field f:arrf){
    //判断返回结果集中是否存在该属性字段
    if(isExistColumn(rs,f.getName())){
    //设置忽略访问校验
    f.setAccessible(true);
    //如果该列存在为属性设置内容
    f.set(obj, rs.getObject(f.getName()));
    }

    }
    list.add(obj);
    }
    } catch (Exception e) {

    e.printStackTrace();
    }
    return list;
    }


    /**
    * 通过反射机制对set方法的执行,进行赋值(实体类属性必须有对应的set,get方法,存在无参构造方法)
    * @param rs
    * @param cls
    * @param <T>
    * @return
    */
    public static <T> List<T> parseResultSetByMethod(ResultSet rs, Class<T> cls) {
    List<T> list=new ArrayList<>();
    try {
    //将查询数据转换为对象
    while (rs.next()){
    //实例化对象
    T obj=cls.newInstance();
    //获取类中所有的属性
    Field[] arrf=cls.getDeclaredFields();
    //遍历属性
    for(Field f:arrf){
    //判断返回结果集中是否存在该属性字段
    if(isExistColumn(rs,f.getName())){
    //属性名字
    String fieldName=f.getName();
    //属性对应的set方法
    StringBuilder methodName=new StringBuilder("set").append(fieldName.substring(0,1).toUpperCase())
    .append(fieldName.substring(1));
    //获得属性的类型
    Class fieldType = f.getType();

    //获得属性对应的set方法的对象
    Method method = cls.getMethod(methodName.toString(), fieldType);
    //执行set方法
    method.invoke(obj,rs.getObject(fieldName));
    }

    }
    list.add(obj);
    }
    } catch (Exception e) {

    e.printStackTrace();
    }
    return list;
    }

    /**
    * 判断查询结果集中是否存在某列
    * @param rs 查询结果集
    * @param columnName 列名
    * @return true 存在; false 不存在
    */
    public static boolean isExistColumn(ResultSet rs, String columnName) {
    try {
    if (rs.findColumn(columnName) > 0 ) {
    return true;
    }
    }
    catch (SQLException e) {
    return false;
    }

    return false;
    }


    /**
    * 便捷查询
    * @param con 数据库连接
    * @param sql 查询语句
    * @param cls 返回实体类的Class对象
    * @return
    */
    public static <T> List<T> queryBySql(Connection con,String sql,Class<T> cls){
    List<T> lists=null;
    try {
    PreparedStatement statement = con.prepareStatement(sql);

    ResultSet resultSet = statement.executeQuery();

    lists=parseResultSetByMethod(resultSet,cls);

    } catch (SQLException e) {
    e.printStackTrace();
    }
    return lists;
    }
    }
  • 相关阅读:
    MySQL-简述
    APP测试-Solo Pi工具-性能测试
    APP测试-弱网测试
    iOS 认识runtime 中的三个指针 isa , IMP , SEL
    iOS 什么是函数式编程
    iOS 根据农历日期 获取当前的农历年份 即 干支纪年法算农历年
    iOS 当公司有人向你提问,你该如何应对?
    Mac 环境 下使用Charles 抓包Http/Https请求
    iOS iPhone X 适配启动图片
    iOS11 仿大标题 导航栏
  • 原文地址:https://www.cnblogs.com/czgxxwz/p/11608436.html
Copyright © 2011-2022 走看看