Java Mysql--链接数据库,数据库字段比较
连接库操作:
package com.qa.xxx; import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.ArrayList;
import java.util.List; @Component
public class MySQLUtil { private static final String MYSQL_DRIVER = "com.mysql.cj.jdbc.Driver"; private static ThreadLocal<Connection> threadLocal = new ThreadLocal<>(); public static Connection getMysqlConnection(String url, String userName, String userPassword){
Connection connection = threadLocal.get();
if(null == connection){
try {
Class.forName(MYSQL_DRIVER);
connection = DriverManager.getConnection(url, userName, userPassword);
return connection;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
return connection;
} /**
* 查询定义的相应的数据库对象bean值
* @param url
* @param userName
* @param userPassword
* @param sql
* @param t
* @param objs
* @param <T>
* @return
*/
public static <T> List<T> excuteQuery(String url, String userName, String userPassword, String sql, T t, Object...objs){
List<T> list = new ArrayList<>();
Connection connection = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
connection = MySQLUtil.getMysqlConnection(url,userName,userPassword);
ps = connection.prepareStatement(sql);
//占位符赋值
if(null != objs){
for(int i=0; i<objs.length; i++){
ps.setObject((i+1), objs[i]);
}
}
rs = ps.executeQuery();
ResultSetMetaData rm = rs.getMetaData();
int columnCount = rm.getColumnCount();
while (rs.next()){
Class<? extends Object> clzss = t.getClass();
T newInstance = (T)clzss.newInstance();
for(int i=1; i<=columnCount; i++){
String columnName = rm.getColumnName(i);
String methodName = "set" + columnName.substring(0,1).toUpperCase() + columnName.substring(1);
String columnClassName = rm.getColumnClassName(i);
Method method = clzss.getDeclaredMethod(methodName, Class.forName(columnClassName));
method.invoke(newInstance, rs.getObject(columnName));
}
list.add(newInstance);
} }catch (Exception e){
e.printStackTrace();
}finally {
MySQLUtil.close(ps);
}
return list;
} /**
* 查询单个字段值
* @param url
* @param userName
* @param userPassword
* @param sql
* @param objs
* @return
*/
public static List<String> excuteOneFieldQuery(String url, String userName, String userPassword, String sql, Object...objs){
List<String> list = new ArrayList<>();
Connection connection = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
connection = MySQLUtil.getMysqlConnection(url,userName,userPassword);
ps = connection.prepareStatement(sql);
//占位符赋值
if(null != objs){
for(int i=0; i<objs.length; i++){
ps.setObject((i+1), objs[i]);
}
}
rs = ps.executeQuery();
ResultSetMetaData rm = rs.getMetaData();
int columnCount = rm.getColumnCount();
while (rs.next()){
list.add(rs.getString(1));
}
}catch (Exception e){
e.printStackTrace();
}finally {
MySQLUtil.close(ps);
}
return list;
} /**
* 增删改
* @param url
* @param userName
* @param userPassword
* @param sql
* @param objs
* @return
*/
public static Integer executeDML(String url, String userName, String userPassword, String sql, Object...objs){
Connection connection = null;
PreparedStatement ps = null;
Integer integer = 0;
try{
connection = MySQLUtil.getMysqlConnection(url,userName,userPassword);
ps = connection.prepareStatement(sql);
if(null != objs){
for(int i=0; i<objs.length; i++){
ps.setObject((i+1), objs[i]);
}
}
integer = ps.executeUpdate();
}catch (SQLException e){
e.printStackTrace();
}finally {
MySQLUtil.close(ps);
}
return integer;
} /**
* 关闭操作
* @param t
* @param <T>
*/
private static <T>void close(T...t){
//循环关流
for(T tmp:t) {
//关闭流对象
if(tmp instanceof AutoCloseable) {
try {
((AutoCloseable)tmp).close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
} }
数据库字段比对:
package com.qa.xxx; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map; @Component
public class DataCompareUtil { private final static Logger logger = LoggerFactory.getLogger(DataCompareUtil.class); /**
* 数据库表查询字段比对
* @param obj1 老查询获取的数据
* @param obj2 新查询获取的数据
* @param list 要对比的字段
* @return 返回<字段名称,原值x 新值x>
*/
public static Map<String, String> compareObject(Object obj1, Object obj2, List<String> list){
Map<String, String> map = new HashMap<>();
if(null != list && !list.isEmpty()){
for(String field : list){
String firstLetter = field.substring(0,1).toUpperCase();
String getter = "get" + firstLetter + field.substring(1);
try {
Method method1 = obj1.getClass().getMethod(getter, new Class[]{});
Method method2 = obj2.getClass().getMethod(getter, new Class[]{});
Object oldValue = method1.invoke(obj1, new Object[] {});
Object newValue = method2.invoke(obj2, new Object[] {});
map.put(field, "原值:" + oldValue.toString() + " 新值:" + newValue.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
return map;
}else {
Class clazz = obj2.getClass();
Field[] fields = clazz.getDeclaredFields();
for(Field field : fields){
String fieldName = field.getName();
String firstLetter = fieldName.substring(0,1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
try {
Method method1 = obj1.getClass().getMethod(getter, new Class[]{});
Method method2 = obj2.getClass().getMethod(getter, new Class[]{});
Object oldValue = method1.invoke(obj1, new Object[] {});
Object newValue = method2.invoke(obj2, new Object[] {});
map.put(fieldName, "原值:" + oldValue.toString() + " 新值:" + newValue.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
return map;
}
} }
Java Mysql--链接数据库,数据库字段比较的更多相关文章
- 关于在Java中链接SQLServer数据库中失败的原因分析
首先声明:笔者是Java的初学者,并且一值是走在自学的道路上,长久以来只有“度娘”相伴.(加入了各种Java学习群,基本没有热心帮人解决问题的.可以理解-_-!!!)大神级的人物就不必看拙文了,没有什 ...
- Java JDBC链接Oracle数据库
package com.test.test; import java.io.FileInputStream;import java.io.FileNotFoundException;import ja ...
- Java语言 链接Oracle数据库
package com.tao.pojo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Pre ...
- Java MySql 批量插入数据库addBatch
//addBatch批量插入数据库 public static void insertCommentToMySql(Set<String> commentList) { Iterator& ...
- java mysql 链接高版本出现SSL验证
key1: String url="jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8 ...
- java面试题:数据库mysql
Web后端数据库一般用mysql. 数据库基础 Q:数据库三范式是什么? 第一范式:列不可再分 第二范式:行可以唯一区分,主键约束 第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束 且三大范 ...
- mysql 关键字于数据库字段于关键字冲突的问题
如果数据库存储字段 为MySQL关键字,那么在查询或者其他操作时会出错.那么我们应该怎么办, 可能有些人会说,换个字段不就好了啊.当然这样也是可以的,完全没问题. 然而,如果是在无法对数据库进行修改和 ...
- Java 通过JDBC查询数据库表结构(字段名称,类型,长度等)
Java 通过JDBC查询数据库表结构(字段名称,类型,长度等) 发布者:唛唛家的豆子 时间:2012-11-20 17:54:02 Java 通过JDBC查询数据库表结构(字段名称,类型,长 ...
- java.sql.Types,数据库字段类型,java数据类型的对应关系
以下转自:http://kummy.itpub.net/post/17165/172850 本文在原文基础上有增减. 本概述是从<JDBCTM Database Access from Java ...
- Java -- JDBC 学习--获取数据库链接
数据持久化 持久化(persistence): 把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大 ...
随机推荐
- 【概率论】4-6:协方差和相关性(Covariance and Correlation)
title: [概率论]4-6:协方差和相关性(Covariance and Correlation) categories: - Mathematic - Probability keywords: ...
- element-ui中el-table表格的使用(如何取到当前列的所有数据)
基本使用都不多说了, 我们知道这个表格组件,每个单元格内容是table绑定的data中的某个属性决定的,但是如果我们想根据这个属性值,渲染出另一个值呢,首先问题来了,我如何获得当前列的值, 查了查,我 ...
- C语言学习笔记2-程序基础和变量
本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/50751977 作者:jadeshu 邮箱: jades ...
- Spring事务管理的一些注意点
在<Spring Boot事务管理(下)>中,已经介绍了如果在 protected.private 或者默认可见性的方法上使用@Transactional,事务将是摆设,也不会抛出任何异常 ...
- 将elasticsearch设置为windows系统服务
目前我都是在windows的环境下操作是Elasticsearch,并且喜欢使用命令行 启动时通过cmd直接在elasticsearch的bin目录下执行elasticsearch 这样直接启动的话集 ...
- Golang switch语句总结
switch 语句基本结构 switch 条件表达式 { case 常量表达式1: 语句 1 case 常量表达式2: 语句 2 . . . case 常量表达式n: 语句 n default: 语句 ...
- 20182332 实验四《Java Socket编程 》实验报告
20182332 实验肆<数据结构与面向对象程序设计>实验报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 盛国榕 学号:20182332 实验教师:王志强 实验日 ...
- Node.js中npm常用命令大全
npm是什么 NPM的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载.安装.上传以及管理已经安装的包. npm ...
- mysql索引分类
mysql索引分类 一.总结 一句话总结: 主键索引:设定为主键后数据库会自动建立索引,innodb为聚簇索引 单值索引:一个索引只包含单个列,一个表可以有多个单列索引:CREATE INDEX id ...
- ILI9341液晶显示
17.1液晶显示原理 TFT-LCD(Thin Film Transistor Liquid Crystal Display)即薄膜晶体管液晶显示器,是微电子技术与液晶显示器技术巧妙结合的的一种技术. ...