zoukankan      html  css  js  c++  java
  • JDBC的一个简单工具类

    package com.zh.dao;
    
    import com.zh.util.DBUtil;
    
    import java.lang.reflect.Field;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.util.ArrayList;
    import java.util.List;
    
    public class BaseDao {
        //全查询
        public static  <T> List<T> findAll(String sql, Class<T> cla, Object... obj){
            //获取数据库连接
            Connection conn = DBUtil.getConnection();
            //定义预处理对象
            PreparedStatement ps = null;
            //定义结果集对象
            ResultSet rs = null;
            //定义返回集合
            ArrayList<T> list=new ArrayList<>();
            try {
                //实例化预处理对象
                ps = conn.prepareStatement(sql);
                for (int i = 0; i < obj.length; i++) {
                    //如果有参数传过来,那么就写入
                    ps.setObject(i+1,obj[i]);
                }
                //执行,返回结果集
                rs = ps.executeQuery();
                //如果结果集里面有数据那么就一直拿
                while (rs.next()){
                    //实例化指定对象
                    T t=rsToBean(rs,cla);
                    //将指定对象放入集合
                    list.add(t);
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                //关闭资源
                DBUtil.close(conn,ps,rs);
            }
            return list;
        }
        //单个查询
        public static  <T> T findOne(String sql, Class<T> cla, Object... obj){
            List<T> list = findAll(sql, cla, obj);
            if (list.size()>0){
                return list.get(0);
            }
            return null;
        }
        //增删改
        public static int editBase(String sql,Object... obj){
            //获取数据库连接
            Connection conn = DBUtil.getConnection();
            //定义预处理对象
            PreparedStatement ps=null;
            try {
                //实例化预处理对象
                ps = conn.prepareStatement(sql);
                //将参数写入
                for (int i = 0; i < obj.length; i++) {
                    ps.setObject(i+1,obj[i]);
                }
                //增删改执行
                return ps.executeUpdate();
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                //关闭资源
                DBUtil.close(conn,ps);
            }
            return -1;
        }
    
        //将指定对象写入对应的数据
        private static <T> T rsToBean(ResultSet rs, Class<T> cla) {
            T t=null;
            try {
                //实例化指定对象
                t=cla.newInstance();
                //获取源数据
                ResultSetMetaData metaData = rs.getMetaData();
                //获取到列数
                int columnCount = metaData.getColumnCount();
                //循环将每列数据放入对应的列名里
                for (int i = 0; i < columnCount; i++) {
                    //获取列名
                    String columnLabel = metaData.getColumnLabel(i + 1);
                    //通过列名得到对应的数据
                    Object object = rs.getObject(columnLabel);
                    //通过反射将列名与javaBean属性对应
                    Field declaredField = cla.getDeclaredField(columnLabel);
                    //操作权限
                    declaredField.setAccessible(true);
                    //将数据写入
                    declaredField.set(t,object);
                }
            }catch (Exception e){
                e.printStackTrace();
            }
            return t;
        }
    }

    以上注释纯属个人理解,若有错误欢迎指正

  • 相关阅读:
    (9)在结果中筛选
    (8)为列表结果分页
    (7)为结果排序
    (6)找回忘记的密码
    (3)验证用户的输入
    (5)发送欢迎邮件
    (4)实现多语言
    (2)通过脚手架自动生成controller和view ----代码先行/数据库先行
    (1)用密码保护限制对view的访问
    (转)scanf()总结
  • 原文地址:https://www.cnblogs.com/zhboke/p/14215594.html
Copyright © 2011-2022 走看看