返回顶部
首页 > 资讯 > 数据库 >Java连接MySQL数据库增删改查的通用方法(推荐)
  • 228
分享到

Java连接MySQL数据库增删改查的通用方法(推荐)

java数据库增删改查 2023-05-31 08:05:48 228人浏览 独家记忆
摘要

运行环境:eclipse+MySQL以前我们Java连接Mysql数据库都是一个数据库写一个类,类下面写好多方法,要是多个数据库,就要写多个类多个方法,导致代码编写太过于繁琐,所以为了改变这样的繁琐,我将连接数据库的方法进行了一系列的封装,

运行环境:eclipse+MySQL

以前我们Java连接Mysql数据库都是一个数据库写一个类,类下面写好多方法,要是多个数据库,就要写多个类多个方法,导致代码编写太过于繁琐,所以为了改变这样的繁琐,我将连接数据库的方法进行了一系列的封装,使用户传入一个对象值Object就可以得到想要的。

我在之前写过一篇普通的Java连接mysql数据库,大家可以看看,以便对比参考之后就知道差距了 数据库——Mysql——>Java篇

接下来我给大家讲讲如何将这个不可复用,又多重复的连接代码,封装起来,非常好用

基本思想:

我们连接数据库的时候,写的方法都是要一个个类 的去写,其中的方法不计其数,连接数据库都是需要:

Class.forName():加载驱动 ——》com.mysql.jdbc.Driver

DriverManager.getConnection():驱动管理,连接到数据库 三个属性1.数据库地址 2.数据库用户名 3.密码

createStatement():创建Statement对象

ResultSet:执行sql语句获得结果集,再遍历

那么我们为了能通用,那么其中的:数据库名,sql语句,遍历结果集要得到的结果,都是要根据不同数据库根据传入参数不同而变化的

首先每个项目开始前都要将数据库实体化,每个表都是一个实体类,表名是类名,字段为其属性,再用set和get方法这些属性

再根据反射机制,对象是我们表的实例化对象,根据我传入方法的这个参数对象,获取其中的方法,属性,属性值,类型等一系列的东西,来实现方法的封装通用

代码演示

先演示一个查询:通过传入这个表的实体类,通过一系列的放射机制,对比拼装成一个查询方法

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;  }
您可能感兴趣的文档:

--结束END--

本文标题: Java连接MySQL数据库增删改查的通用方法(推荐)

本文链接: https://lsjlt.com/news/224405.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作