版权声明:本文为博主原创文章,未经博主允许不得转载。

Java连接MySQL数据库增删改查通用方法

  运行环境:eclipse+MySQL

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

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

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

基本思想:

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

  1. Class.forName():加载驱动   ——》com.mysql.jdbc.Driver
  2. DriverManager.getConnection():驱动管理,连接到数据库 三个属性1.数据库地址  2.数据库用户名   3.密码
  3. createStatement():创建Statement对象
  4. 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;
}

还有一个方法就是将首字母变大写的

    public static String upperCase(String str) {
//先将字符串转换为字符数组
char[] ch = str.toCharArray();
//将数组的第一个元素 即字符串首字母,进行ASCII 码前移,ASCII 中大写字母从65开始,小写字母从97开始,所以这里减去32。
if (ch[0] >= 'a' && ch[0] <= 'z') {
ch[0] = (char) (ch[0] - 32);
}
return new String(ch);
}

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

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

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

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

Java连接MySQL数据库增删改查通用方法的更多相关文章

  1. java连接mysql数据库增删改查操作记录

    1. 连接数据库.得到数据库连接变量 注意连接数据库的时候 (1)打开DB Browser 新建一个Database Driver,注意加入Driver JARs的时候加入的包,我的是mysql-co ...

  2. jsp-2 简单的servlet连接mysql数据库 增删改查

    连接mysql数据库的操作 有增删改查 用的包有 commons-lang3-3.5 mysql-connector-java-5.1.40-bin 但是实际上也就是 数据查询和数据处理两种 所以对数 ...

  3. java连接mysql以及增删改查操作

    java连接数据库的代码基本是固定的,步骤过程觉得繁琐些,代码记起来对我来说是闹挺.直接上代码: (温馨提醒:你的项目提前导入连接数据库的jar包才有的以下操作 ) class DBConnectio ...

  4. JDBC之Java连接mysql实现增删改查

    使用软件:mysql.eclipse 链接步骤: 1.注册驱动 2.创建一个连接对象 3.写sql语句 4.执行sql语句并返回一个结果或者结果集 5.关闭链接(一般就是connection.stat ...

  5. python操作mysql数据库增删改查的dbutils实例

    python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...

  6. Asp.Net操作MySql数据库增删改查

    Asp.Net操作MySql数据库增删改查,话不多说直接步入正题.git源码地址:https://git.oschina.net/gxiaopan/NetMySql.git  1.安装MySQL数据库 ...

  7. MySQL数据库(增删改查语句)

    MySQL数据库(增删改查语句)一.登录数据库:---->  mysql -uroot -proot;(对应用户名和密码)二.SQL语句:    数据定义语言DDL  用来定义数据库.表.列,关 ...

  8. Java连接MongoDB进行增删改查

    1.导入必须的包: 详情看项目:http://pan.baidu.com/s/1cvDAOY 2.通过Myeclipse创建WEB项目 3. 3.bean:创建实体类 package com.bean ...

  9. python2.7入门---操作mysql数据库增删改查

    Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口.Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: G ...

随机推荐

  1. C#获取存储过程的 Return返回值和Output输出参数值

    1.获取Return返回值  程序代码 //存储过程//Create PROCEDURE MYSQL//     @a int,//     @b int//AS//     return @a + ...

  2. 《天书夜读:从汇编语言到windows内核编程》六 驱动、设备、与请求

    1)跳入到基础篇的内核编程第7章,驱动入口函数DriverEnter的返回值决定驱动程序是否加载成功,当打算反汇编阅读驱动内核程序时,可寻找该位置. 2)DRIVER_OBJECT下的派遣函数(分发函 ...

  3. 浅谈Maven

    最近的有用到Maven 所以就大概跟大家谈一下Maven 1什么是Maven? Maven我个人的理解就是项目架包管理 通俗易懂的来说就是管理配置你项目中的所有jar包的 废话不多说 Maven去ht ...

  4. javaweb-1-B/S初论

    一.B/S结构的基本概念 1.什么是动态网页 2.为什么需要动态网页 3.如何实现动态网页 4.为什么学习B/S技术 4.1C/S结构 优点: 1.C/S架构的界面和操作可以很丰富. 2.安全性能可以 ...

  5. 转贴---Performance Counter(包含最全的Windows计数器解释)

    http://support.smartbear.com/viewarticle/55773/ 这个Article中介绍了一个新工具,TestComplete,把其中涉及到性能计数器的部分摘抄出来了. ...

  6. CentOS6.9编译安装Nginx1.12

    1:安装必要的库 Bash yum install gc gcc gcc-c++ pcre-devel zlib-devel openssl-devel 2:创建Nginx用户和组 Bash grou ...

  7. VueJS引入css或者less文件的一些坑

    我们在做Vue+webpack的时,难免会引入各种公共css样式文件,那么我们改如何引入呢?引入时会有那些坑呢? 首先,引入公共样式时,我们在“main.js”里使用AMD的方式引入,即 requir ...

  8. Less 的使用方法

    Less 的使用方法 Less 可以直接在浏览器端运行(支持IE6+.Webkit.Firefox),也可以借助Node.js或者Rhino在服务端运行. Less是一种动态语言,无论是在浏览器端,还 ...

  9. LayoutInflater (转)

    在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...

  10. spring cloud feign不支持@RequestBody+ RequestMethod.GET,报错

    1.问题梳理: 异常:org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not ...