zoukankan      html  css  js  c++  java
  • JDBC------之结果集元数据的操作02

    当数据库中的列名和我们java类中的属性名不相同的时候怎么实现对象的自动封装呢?

    查看下面的代码:

    package com.itheima.hui;
    
    import com.itheima.hui.beans.User;
    import com.itheima.hui.utils.JDBCUtils;
    import jdk.internal.org.objectweb.asm.tree.FieldInsnNode;
    
    import java.io.IOException;
    import java.lang.reflect.Field;
    import java.sql.*;
    
    public class JDBCormIgnore {
        public static void main(String[] args) {
            String sql = "select user_id userId, user_name userName,user_birthday userBirthday, user_gender userGender from user where user_id=?";
            Object o = JDBCormIgnore.ignoreMatch(sql, 1);
            System.out.println(o);
    
    
        }
    
        public static Object ignoreMatch(String sql, Object... args) {
    
    
            Connection connect = null;
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
            //1.使用自定义工具类获得连接对象
            try {
                connect = JDBCUtils.getConnect();
                preparedStatement = connect.prepareStatement(sql);
                //占位符赋值操作
                for (int i = 0; i < args.length; i++) {
                    preparedStatement.setObject(i + 1, args[i]);
                }
                //执行获得结果集
                resultSet = preparedStatement.executeQuery();
                //根据结果集对象获得结果数据源
                ResultSetMetaData metaData = resultSet.getMetaData();
                int columnCount = metaData.getColumnCount();//查询结果的列数
    
                //获取一个查询对象
                if (resultSet.next()) {
                    //创建User对象
                    User user = new User();
                    for (int i = 0; i < columnCount; i++) {
                        //获取列的别名,如果没有别名的话就获取真实的列名
                        String columnLabel = metaData.getColumnLabel(i + 1);
                        Class<User> clazz = User.class;
                        Object value = resultSet.getObject(i + 1);
                        Field declaredField = clazz.getDeclaredField(columnLabel);
                        declaredField.setAccessible(true);
                        declaredField.set(user, value);
    
    
                    }
    
    
                    return user;
    
                }
    
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
    //使用自定义工具类关闭资源
    
                JDBCUtils.close(connect, preparedStatement, resultSet);
    
    
            }
    
            return null;
        }
    
    
    }
    迎风少年
  • 相关阅读:
    win10安装virtualBox创建CentOS6.5虚拟机
    ES系列二、CentOS7安装ES head6.3.1
    ES系列一、CentOS7安装ES 6.3.1、集成IK分词器
    Python easyGUI 猜数字
    Python easyGUI 登录框 非空验证
    Python easyGUI 文件浏览 显示文件内容
    Python easyGUI 文件对比 覆盖保存
    Python 统计代码量
    什么是一个人真正的魅力?
    Python学习笔记(15)- osos.path 操作文件
  • 原文地址:https://www.cnblogs.com/ZYH-coder0927/p/13840273.html
Copyright © 2011-2022 走看看