博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java反射应用
阅读量:4978 次
发布时间:2019-06-12

本文共 7436 字,大约阅读时间需要 24 分钟。

package cn.sxt.TestClass;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import cn.sxt.model.Dept;import cn.sxt.util.DBUtil;public class TestUser {    public static void main(String[] args) {        String sql = "select * from dept";        List list = TestUser.rows2beans(sql, Dept.class);        for (Object d : list) {            // Dept dept = (Dept)d;            System.out.println(d);        }    }    public static List rows2beans(String sql, Class cls) {        List list = new ArrayList<>();        // 连接数据库        Connection conn = DBUtil.getConnection();        PreparedStatement ps = null;        ResultSet rs = null;        try {            // 向数据库发送sql语句            ps = conn.prepareStatement(sql);            // 执行sql语句返回结果集            rs = ps.executeQuery();            // ResultSetMetaData可用于获取关于 ResultSet 对象中列的类型和属性信息的对象。            ResultSetMetaData metaData = rs.getMetaData();            // 获取查询的列数            int count = metaData.getColumnCount();            while (rs.next()) {                // 创建反射实例                Object obj = cls.newInstance();                for (int i = 0; i < count; i++) {                    // 获取数据库列名                    String fileName = metaData.getColumnName(i + 1).toLowerCase();                    // 通过列名获取类中的属性的描述                    Field field = cls.getDeclaredField(fileName);                    // 根据set方法名获取set方法对应的描述类                    Method m = cls.getDeclaredMethod(getSetMethodName(fileName), field.getType());                    // 判断接收的数据类型                    Object object = rs.getObject(fileName);                    if (object != null) {                        if (field.getType().getName().equals("int")                                || field.getType().getName().equals("Object.lang.Integer")) {                            m.invoke(obj, rs.getInt(fileName));                        } else if (field.getType().getName().equals("long")                                || field.getType().getName().equals("Object.lang.Long")) {                            m.invoke(obj, rs.getLong(fileName));                        } else if (field.getType().getName().equals("short")                                || field.getType().getName().equals("Object.lang.Short")) {                            m.invoke(obj, rs.getShort(fileName));                        } else if (field.getType().getName().equals("double")                                || field.getType().getName().equals("Object.lang.Double")) {                            m.invoke(obj, rs.getDouble(fileName));                        } else if (field.getType().getName().equals("float")                                || field.getType().getName().equals("Object.lang.Float")) {                            m.invoke(obj, rs.getFloat(fileName));                        } else if (field.getType().getName().equals("byte")                                || field.getType().getName().equals("Object.lang.Byte")) {                            m.invoke(obj, rs.getByte(fileName));                        } else {                            m.invoke(obj, object);                        }                    }                }                list.add(obj);            }        } catch (SQLException e) {            e.printStackTrace();        } catch (NoSuchFieldException e) {            e.printStackTrace();        } catch (SecurityException e) {            e.printStackTrace();        } catch (NoSuchMethodException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalAccessException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalArgumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (InvocationTargetException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (InstantiationException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } finally {            DBUtil.close(conn, ps, rs);        }        return list;    }    public static String getSetMethodName(String fileName) {        return "set" + fileName.substring(0, 1).toUpperCase() + fileName.substring(1);    }}
package cn.sxt.util;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;public class DBUtil {    private static String driver = "";    private static String url = "";    private static String user = "";    private static String password = "";    static {        InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.propertise");        Properties pt = new Properties();        try {            pt.load(in);        } catch (IOException e1) {            // TODO Auto-generated catch block            e1.printStackTrace();        }        driver = pt.getProperty("driver");        url = pt.getProperty("url");        user = pt.getProperty("user");        password = pt.getProperty("password");        try {            Class.forName(driver);        } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    /*     * public static void main(String[] args) { System.out.println(driver);     * System.out.println(url); System.out.println(user);     * System.out.println(password);     *      * }     */    //获取数据库连接    public static Connection getConnection() {        Connection conn = null;        try {            conn = DriverManager.getConnection(url, user, password);        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return conn;    }        public static void close(Connection conn, Statement ps) {        if (ps != null) {            try {                ps.close();            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        if (conn != null) {            try {                conn.close();            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }    public static void close(Connection conn, Statement ps, ResultSet rs) {        if (rs != null) {            try {                rs.close();            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        if (ps != null) {            try {                ps.close();            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        if (conn != null) {            try {                conn.close();            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }    }

 

posted on
2019-04-23 20:54 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/cqming/p/10758890.html

你可能感兴趣的文章
(实用)Eclipse中使用命令行(运行外部程序)
查看>>
react 复习4- 生命周期
查看>>
禁止移动端safari浏览器双击放大事件
查看>>
Socket编程的面纱
查看>>
CSS hack方式一览
查看>>
sublime text3 注册码
查看>>
Linux ps命令详解与示例说明
查看>>
最简单的git 用法
查看>>
剑指offer--面试题20
查看>>
Lombok使用与原理
查看>>
Masonry介绍与使用实践(快速上手Autolayout)
查看>>
struts标签库
查看>>
中文词频统计
查看>>
boost::lockfree::stack
查看>>
nginx 特定目录禁止php执行
查看>>
SpringMVC实现简单应用
查看>>
mysql5.7 安装版安装
查看>>
VM14安装Mas os 13
查看>>
2014年4月4日
查看>>
Java高新技术 类加载器
查看>>