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; }
大家可以参考这个方法完全可以改装成剩余的插入,修改,删除
再给大家提示一下插入的方法封装重要的一点是,获取其中要插入的字段,根据插入语句拼接成一个完整的sql语句就可以完成
//m.invoke(user);我的理解是运行user类下的方法m,得到返回值 object object=m.invoke(user);
这些东西需要自己多去思考总结,希望对大家有用,我就不多写了,留给大家一点思考的空间,需要剩下的方法封装可以留言告诉我
以上这篇java连接mysql数据库增删改查的通用方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。