当前位置:Gxlcms > 数据库问题 > Java连接MySQL数据库

Java连接MySQL数据库

时间:2021-07-01 10:21:17 帮助过:13人阅读

public static List<Object> query(Class<?> obj) {
        Statement  st=null;
        List<Object> list=new ArrayList<>();
        //数据库MySQL的地址
                String DBURL="jdbc:mysql://localhost:3306/lms_leave?useUnicode=true&characterEncoding=utf-8"; 
                String DBName="root"; //登入用户名
                String DBPwd="123456";//登入密码
                //加载驱动
                try {
                    Class.forName("com.mysql.jdbc.Driver");
                //连接数据库
                Connection conn=DriverManager.getConnection(DBURL,DBName,DBPwd);
                //创建Statement对象
                st=conn.createStatement();
                ResultSet rs=st.executeQuery("select * from "+obj.getSimpleName());
                //获取传入类中的方法
                Method[] methods=obj.getMethods();
                //设置一个方法的list集合,下面将方法放入其中,以便调用
                List<Method> list_m= new ArrayList<>();
                //类中有许多方法,过滤一些方法,获取自己想要的方法
                for(int i=0;i<methods.length;i++){ //过滤方法
                    //判断方法名字中是否有set这个提取
                    if (methods[i].getName().contains("set")) {
                        //将方法添加到list中
                        list_m.add(methods[i]);
                    }
                }
                //创建字符串string集合,获取下面的字段名存入
                List<String> fieldname=new ArrayList<>();
                //获取类中的属性,其属性对应数据库中的字段
                Field[]    f=obj.getDeclaredFields();
                //循环将字段中的名字首个变大写
                for (int i = 0; i < f.length; i++) {
                    //获取名字
                    String field=f[i].getName();
                    //变大小写,存入fieldname集合
                    fieldname.add(upperCase(field));
                }
                //获取得到结果集(rs)的结构,比如字段数、字段名等。
                ResultSetMetaData  rsmd=    rs.getMetaData();
                //循环读取结果集中的数据添加到list集合中
                while (rs.next()) {
                    //创建一个传入类对象user
                    Object user=obj.newInstance();
                    //遍历方法的集合
                    for (Method m : list_m) {
                        //遍历字段的集合
                        for (int i = 0; i < f.length; i++) {
                            //方法和字段作比较,查看方法名中是否含有这个字段名,两者匹配
                            if (m.getName().contains("set"+fieldname.get(i))) {
                                //匹配成功 ,则去得到rsmd去获取数据库中的字段名,rs.getObject,再根据获取的这个字段名去得到这个字段值
                                Object value=rs.getObject(rsmd.getColumnName(i+1));
                                //获取这个字段的类型,以便去储存这个值的类型
                                Class<?> type=f[i].getType();
                                //是int类型的转化
                                if (type==int.class) {
                                    value=new Integer(value.toString());
                                }
                                //string类型的转化
                                if (type==String.class) {
                                    value=value.toString();
                                }
                                //m是user对象中的方法,设置其值
                                m.invoke(user, value);
                            }
                        }
                    }
                    //将的到的user对象实例添加到list集合中
                    list.add(user);
                }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return list;
    }
技术分享

大家可以参考这个方法完全可以改装成剩余的插入,修改,删除

再给大家提示一下插入的方法封装重要的一点是,获取其中要插入的字段,根据插入语句拼接成一个完整的sql语句就可以完成

//m.invoke(user);我的理解是运行user类下的方法m,得到返回值
Object object=m.invoke(user);

这些东西需要自己多去思考总结,希望对大家有用,我就不多写了,留给大家一点思考的空间,需要剩下的方法封装可以留言告诉我

 

Java连接MySQL数据库

标签:too   local   表名   length   多重   stack   com   数据库mysql   arraylist   

人气教程排行