zoukankan      html  css  js  c++  java
  • Java_jdbc 基础笔记之十三 数据库连接(DAO)

    public class DAO {
        // INSERT, UPDATE, DELETE 操作都可以包含在其中
        public void update(String sql, Object... args) {
            Connection conn = null;
            PreparedStatement ps = null;
            try {
                conn = JDBCTools.getConnection();
                ps = conn.prepareStatement(sql);
                for (int i = 0; i < args.length; i++) {
                    ps.setObject(i + 1, args[i]);
                }
                ps.executeUpdate();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCTools.close(null, ps, conn);
            }
    
        }
    
        // 查询一条记录, 返回对应的对象
        public <T> T get(Class<T> clazz, String sql, Object... args) {
            T entity = null;
            // 1获取Connection
            Connection conn = null;
            // 2 获取PreparedStatement
            PreparedStatement ps = null;
            // 3填充占位符
            ResultSet rs = null;
            try {
                conn = JDBCTools.getConnection();
                ps = conn.prepareStatement(sql);
                for (int i = 0; i < args.length; i++) {
                    ps.setObject(i + 1, args[i]);
                }
                // 4 进行查询得到rs
                rs = ps.executeQuery();
                // 5若 ResultSet中有记录,
                // 准备一个MAP 键:存放列的别名,值:存放列的值
                Map<String, Object> values = new HashMap<String, Object>();
                // 6得到ResultSetMetaData对象
                ResultSetMetaData rmsd = rs.getMetaData();
                // 7处理ResultSet,把指针向下移动一个单位
                if (rs.next()) {
                    // 8 由ResultSetMetaData 对象得到结果集中有多少列
                    for (int i = 0; i < rmsd.getColumnCount(); i++) {
                        // 9由ResultSetMetaData得到每一列的别名,由rs得到每一列的值
                        String columnLabel = rmsd.getColumnLabel(i + 1);
                        Object columnValue = rs.getObject(i + 1);
                        // 10 填充Map
                        values.put(columnLabel, columnValue);
                    }
    
                }
                if (values.size() > 0) {
                    // 11 用反射创建Class对应的对象
                    entity = clazz.newInstance();
                    // 12 遍历Map对象,用反射填充对象的属性值:
                    // 属性名为Map中的key 属性值为Map中的value
                    for (Map.Entry<String, Object> map : values.entrySet()) {
                        String fieldName = map.getKey();
                        Object fieldValue = map.getValue();
                        BeanUtils.setProperty(entity, fieldName, fieldValue);
    
                    }
    
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCTools.close(rs, ps, conn);
            }
    
            return entity;
    
        }
    }
    public class DAOTest {
        DAO dao = new DAO();
    
        @Test
        public void testUpdate() {
            String sql = "INSERT INTO customers(name,email,birth)VALUES(?,?,?)";
            dao.update(sql, "XiaoWang", "XiaoWang@guigu.com", new Date(
                    new java.util.Date().getTime()));
    
        }
    
        @Test
        public void testGet() {
            String sql="SELECT flow_id flowId, type, id_card iDCard, "
                    + "exam_card examCard, student_name studentName, "
                    + "location, grade " + "FROM examstudent WHERE flow_id = ?";
            Student stu=dao.get(Student.class, sql, 9);
            System.out.println(stu);
        }
    }

    转: https://blog.csdn.net/YL1214012127/article/details/48350107

  • 相关阅读:
    Git 码云操作
    多线程基础必要知识点!看了学习多线程事半功倍(转)
    Spring技术内幕:设计理念和整体架构概述(转)
    单例模式你会几种写法?(转)
    Linux-看完这篇Linux基本的操作就会了(转)
    每天一个linux命令9之crontab 定时任务
    在linux下给grep命令添加颜色
    springmvc使用StringHttpMessageConverter需要配置编码
    MySQL 中的 base64 函数
    spirng整合rmi
  • 原文地址:https://www.cnblogs.com/fps2tao/p/12026419.html
Copyright © 2011-2022 走看看