Java连接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;
}
还有一个方法就是将首字母变大写的
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数据库增删改查通用方法的更多相关文章
- java连接mysql数据库增删改查操作记录
1. 连接数据库.得到数据库连接变量 注意连接数据库的时候 (1)打开DB Browser 新建一个Database Driver,注意加入Driver JARs的时候加入的包,我的是mysql-co ...
- jsp-2 简单的servlet连接mysql数据库 增删改查
连接mysql数据库的操作 有增删改查 用的包有 commons-lang3-3.5 mysql-connector-java-5.1.40-bin 但是实际上也就是 数据查询和数据处理两种 所以对数 ...
- java连接mysql以及增删改查操作
java连接数据库的代码基本是固定的,步骤过程觉得繁琐些,代码记起来对我来说是闹挺.直接上代码: (温馨提醒:你的项目提前导入连接数据库的jar包才有的以下操作 ) class DBConnectio ...
- JDBC之Java连接mysql实现增删改查
使用软件:mysql.eclipse 链接步骤: 1.注册驱动 2.创建一个连接对象 3.写sql语句 4.执行sql语句并返回一个结果或者结果集 5.关闭链接(一般就是connection.stat ...
- python操作mysql数据库增删改查的dbutils实例
python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...
- Asp.Net操作MySql数据库增删改查
Asp.Net操作MySql数据库增删改查,话不多说直接步入正题.git源码地址:https://git.oschina.net/gxiaopan/NetMySql.git 1.安装MySQL数据库 ...
- MySQL数据库(增删改查语句)
MySQL数据库(增删改查语句)一.登录数据库:----> mysql -uroot -proot;(对应用户名和密码)二.SQL语句: 数据定义语言DDL 用来定义数据库.表.列,关 ...
- Java连接MongoDB进行增删改查
1.导入必须的包: 详情看项目:http://pan.baidu.com/s/1cvDAOY 2.通过Myeclipse创建WEB项目 3. 3.bean:创建实体类 package com.bean ...
- python2.7入门---操作mysql数据库增删改查
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口.Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: G ...
随机推荐
- SimpleMembership
最近2个月以来,一直在学习MVC,从最开始的2,一直到最新的4.从原来的aspx到现在的Razor引擎,越学越开心,越学越上瘾. 最近为新项目做准备,打算用MVC4,VS2012+SQL2012,反正 ...
- Grafana+Prometheus系统监控之MySql
架构 grafana和prometheus之前安装配置过,见:Grafana+Prometheus打造全方位立体监控系统 MySql安装 MySql的地位和重要性就不言而喻了,作为开源产品深受广大中小 ...
- CLR类型设计之泛型(二)
在上一篇文章中,介绍了什么是泛型,以及泛型和非泛型的区别,这篇文章主要讲一些泛型的高级用法,泛型方法,泛型接口和泛型委托,协变和逆变泛型类型参数和约束性,泛型的高级用法在平时的业务中用的不多,多用于封 ...
- STM32F4中USB与PC双向通信
STM32F4系列处理器内部集成了USB-OTG控制器,在不要外部USB IC下就可以实现USB通信,最近两天看了下如何利用STM32的USB实现通信,记录下关键步骤: 1. 从http://www. ...
- java的String构造对象的几种方法以及内存运行过程
String类创建对象的方法可以分为以下三种 1.String a = "123"; 2.String b = new String("123"); 3.Str ...
- ThinkPHP中浏览器友好输出函数
// 环境常量 define('IS_CLI', PHP_SAPI == 'cli' ? true : false); define('IS_WIN', strpos(PHP_OS, 'WIN') ! ...
- 已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)
1.文字描述: 已知一颗二叉树的前序(后序)遍历序列和中序遍历序列,如何构建这棵二叉树? 以前序为例子: 前序遍历序列:ABCDEF 中序遍历序列:CBDAEF 前序遍历先访问根节点,因此前序遍历序列 ...
- Tomcat:Can't load AMD 64-bit .dll on a IA 32 platform(问题记录)
从报错看,这主要是应为64位-32位不兼容导致的.好在,在报此错的情况下,tomcat还是跑起来了. 具体来说,从网上搜索的一些资料来看,应该是jdk版本与tomcat不一致 .tomcat我的是64 ...
- let and const
let 和 const 命令 let 命令 基本用法 ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = 10; v ...
- 《java.util.concurrent 包源码阅读》26 Fork/Join框架之Join
接下来看看调用ForkJoinTask的join方法都发生了什么: public final V join() { // doJoin方法返回该任务的状态,状态值有三种: // NORMAL, CAN ...