zoukankan      html  css  js  c++  java
  • 关于jdbc

    package com.jdbc.dao;

    import com.jdbc.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){
    //1、获取数据库连接
    Connection conn = DBUtil.getConnection();
    //2、定义批处理对象
    PreparedStatement ps=null;
    //3、定义结果集对象
    ResultSet rs=null;
    //4、定义返回值集合
    List<T> list=new ArrayList<>();
    try {
    //5、获取批处理对象
    ps = conn.prepareStatement(sql);
    //6、如果有参数那就把值设置进去,比如我查询一个id,如果id为1
    //那么ps.setObject(i+1,obj[i])=ps.setInt(1,obj[0])
    //obj[o]=1
    for (int i = 0; i < obj.length; i++) {
    ps.setObject(i+1,obj[i]);
    }
    //7、执行,并把值返回到结果集
    rs=ps.executeQuery();
    //8、现在有了列名但是每个列没有值,所以,我们需要从结果集里面获取
    while (rs.next()){
    //每一行就相当于一个javaBean对象
    T t=rsToBean(rs,cla);
    //通过上面的操作我们已经获取到了指定的JavaBean对象,把他添加进集合就完成了
    list.add(t);
    }
    }catch (Exception e){
    e.printStackTrace();
    }finally {
    DBUtil.close(conn,ps,rs);
    }
    return list;
    }

    public static <T> T selectOne(String sql,Class<T> cla,Object... obj) {
    //先执行全查询
    List<T> list = findAll(sql, cla, obj);
    //如果集合里面有参数,那么返回第一位
    if (list.size()>0){
    return list.get(0);
    }
    //否则返回null
    return null;
    }

    public static int editBase(String sql,Object... obj){
    //1、获取数据库连接
    Connection conn = DBUtil.getConnection();
    //2、定义批处理对象
    PreparedStatement ps=null;
    try {
    //5、获取批处理对象
    ps = conn.prepareStatement(sql);
    for (int i = 0; i < obj.length; i++) {
    ps.setObject(i+1,obj[i]);
    }
    //7、执行
    ps.executeUpdate();
    }catch (Exception e){
    e.printStackTrace();
    }finally {
    DBUtil.close(conn,ps);
    }
    return -1;
    }

    public static <T> T rsToBean(ResultSet rs, Class<T> cla) {
    T t=null;
    try {
    //1、首先实例化指定的类
    t=cla.newInstance();
    //2、通过结果集获得结果集里的源数据
    ResultSetMetaData metaData = rs.getMetaData();
    //3、由于我们不知道这个表有多少列,所以我们要获取到列数
    int columnCount = metaData.getColumnCount();
    //4、我们有了列数,就可以从源数据中循环,给每一列赋值
    for (int i = 0; i < columnCount; i++) {
    //那么首先我们需要获取到列名,因为getColumnLabel的下标是从1开始,
    // 而我们的循环是从0开始,所以为了字段和值一一对应,所以我们要i+1
    String columnLabel = metaData.getColumnLabel(i+1);
    //现在有了列名,然后需要获取列值,我们依旧从源数据中获取列值
    //我们需要根据列名获取到对应的列值
    Object object = rs.getObject(columnLabel);
    //根据表的列名找到 参数cla 的属性
    Field declaredField = cla.getDeclaredField(columnLabel);
    //由于我们要在外面操作,所以我们需要设置权限,这样我们就可以操作了
    declaredField.setAccessible(true);
    //现在我们已经通过反射把表的列名和JavaBean的属性对应了起来,
    //而且我们也获取到了列名和列值对应的数据,接下来我们把数据写进去,
    //就获得了JavaBean对象中的一个属性值
    declaredField.set(t,object);
    }
    }catch (Exception e){
    e.printStackTrace();
    }
    return t;
    }
    }
  • 相关阅读:
    微信红包实现算法
    Java中Redis简单入门
    Java之英格玛简单实现以及加密验证码的应用
    Java实现二维码
    String,StringBuffer,StringBuilder个人认为较重要的区别
    Java中Comparable和Comparator你知多少?
    Oracle
    maven下载及安装最详解
    破解路由器
    Activiti工作流学习-----基于5.19.0版本(8)
  • 原文地址:https://www.cnblogs.com/zhboke/p/13962150.html
Copyright © 2011-2022 走看看