Java Mysql--链接数据库,数据库字段比较

 

连接库操作:

  1 package com.qa.xxx;
  2 
  3 
  4 import org.springframework.stereotype.Component;
  5 import java.lang.reflect.Method;
  6 import java.sql.*;
  7 import java.util.ArrayList;
  8 import java.util.List;
  9 
 10 @Component
 11 public class MySQLUtil {
 12 
 13     private static final String MYSQL_DRIVER = "com.mysql.cj.jdbc.Driver";
 14 
 15     private static ThreadLocal<Connection> threadLocal = new ThreadLocal<>();
 16 
 17 
 18     public static Connection getMysqlConnection(String url, String userName, String userPassword){
 19         Connection connection = threadLocal.get();
 20         if(null == connection){
 21             try {
 22                 Class.forName(MYSQL_DRIVER);
 23                 connection = DriverManager.getConnection(url, userName, userPassword);
 24                 return connection;
 25             } catch (ClassNotFoundException e) {
 26                 e.printStackTrace();
 27             } catch (SQLException e) {
 28                 e.printStackTrace();
 29             }
 30         }
 31         return connection;
 32     }
 33 
 34     /**
 35      * 查询定义的相应的数据库对象bean值
 36      * @param url
 37      * @param userName
 38      * @param userPassword
 39      * @param sql
 40      * @param t
 41      * @param objs
 42      * @param <T>
 43      * @return
 44      */
 45     public static <T> List<T> excuteQuery(String url, String userName, String userPassword, String sql, T t, Object...objs){
 46         List<T> list = new ArrayList<>();
 47         Connection connection = null;
 48         PreparedStatement ps = null;
 49         ResultSet rs = null;
 50         try{
 51             connection = MySQLUtil.getMysqlConnection(url,userName,userPassword);
 52             ps = connection.prepareStatement(sql);
 53             //占位符赋值
 54             if(null != objs){
 55                 for(int i=0; i<objs.length; i++){
 56                     ps.setObject((i+1), objs[i]);
 57                 }
 58             }
 59             rs = ps.executeQuery();
 60             ResultSetMetaData rm = rs.getMetaData();
 61             int columnCount = rm.getColumnCount();
 62             while (rs.next()){
 63                 Class<? extends Object> clzss = t.getClass();
 64                 T newInstance = (T)clzss.newInstance();
 65                 for(int i=1; i<=columnCount; i++){
 66                     String columnName = rm.getColumnName(i);
 67                     String methodName = "set" + columnName.substring(0,1).toUpperCase() + columnName.substring(1);
 68                     String columnClassName = rm.getColumnClassName(i);
 69                     Method method = clzss.getDeclaredMethod(methodName, Class.forName(columnClassName));
 70                     method.invoke(newInstance, rs.getObject(columnName));
 71                 }
 72                 list.add(newInstance);
 73             }
 74 
 75         }catch (Exception e){
 76             e.printStackTrace();
 77         }finally {
 78             MySQLUtil.close(ps);
 79         }
 80         return list;
 81     }
 82 
 83     /**
 84      * 查询单个字段值
 85      * @param url
 86      * @param userName
 87      * @param userPassword
 88      * @param sql
 89      * @param objs
 90      * @return
 91      */
 92     public static List<String> excuteOneFieldQuery(String url, String userName, String userPassword, String sql, Object...objs){
 93         List<String> list = new ArrayList<>();
 94         Connection connection = null;
 95         PreparedStatement ps = null;
 96         ResultSet rs = null;
 97         try{
 98             connection = MySQLUtil.getMysqlConnection(url,userName,userPassword);
 99             ps = connection.prepareStatement(sql);
100             //占位符赋值
101             if(null != objs){
102                 for(int i=0; i<objs.length; i++){
103                     ps.setObject((i+1), objs[i]);
104                 }
105             }
106             rs = ps.executeQuery();
107             ResultSetMetaData rm = rs.getMetaData();
108             int columnCount = rm.getColumnCount();
109             while (rs.next()){
110                 list.add(rs.getString(1));
111             }
112         }catch (Exception e){
113             e.printStackTrace();
114         }finally {
115             MySQLUtil.close(ps);
116         }
117         return list;
118     }
119 
120     /**
121      * 增删改
122      * @param url
123      * @param userName
124      * @param userPassword
125      * @param sql
126      * @param objs
127      * @return
128      */
129     public static Integer executeDML(String url, String userName, String userPassword, String sql, Object...objs){
130         Connection connection = null;
131         PreparedStatement ps = null;
132         Integer integer = 0;
133         try{
134             connection = MySQLUtil.getMysqlConnection(url,userName,userPassword);
135             ps = connection.prepareStatement(sql);
136             if(null != objs){
137                 for(int i=0; i<objs.length; i++){
138                     ps.setObject((i+1), objs[i]);
139                 }
140             }
141             integer = ps.executeUpdate();
142         }catch (SQLException e){
143             e.printStackTrace();
144         }finally {
145             MySQLUtil.close(ps);
146         }
147         return integer;
148     }
149 
150     /**
151      * 关闭操作
152      * @param t
153      * @param <T>
154      */
155     private static <T>void close(T...t){
156         //循环关流
157         for(T tmp:t) {
158             //关闭流对象
159             if(tmp instanceof AutoCloseable) {
160                 try {
161                     ((AutoCloseable)tmp).close();
162                 } catch (Exception e) {
163                     e.printStackTrace();
164                 }
165             }
166         }
167     }
168 
169 }

 

数据库字段比对:

 1 package com.qa.xxx;
 2 
 3 
 4 import org.slf4j.Logger;
 5 import org.slf4j.LoggerFactory;
 6 import org.springframework.stereotype.Component;
 7 import java.lang.reflect.Field;
 8 import java.lang.reflect.Method;
 9 import java.util.HashMap;
10 import java.util.List;
11 import java.util.Map;
12 
13 @Component
14 public class DataCompareUtil {
15 
16     private final static Logger logger = LoggerFactory.getLogger(DataCompareUtil.class);
17 
18     /**
19      * 数据库表查询字段比对
20      * @param obj1 老查询获取的数据
21      * @param obj2 新查询获取的数据
22      * @param list 要对比的字段
23      * @return 返回<字段名称,原值x 新值x>
24      */
25     public static Map<String, String> compareObject(Object obj1, Object obj2, List<String> list){
26         Map<String, String> map = new HashMap<>();
27         if(null != list && !list.isEmpty()){
28             for(String field : list){
29                 String firstLetter = field.substring(0,1).toUpperCase();
30                 String getter = "get" + firstLetter + field.substring(1);
31                 try {
32                     Method method1 = obj1.getClass().getMethod(getter, new Class[]{});
33                     Method method2 = obj2.getClass().getMethod(getter, new Class[]{});
34                     Object oldValue = method1.invoke(obj1, new Object[] {});
35                     Object newValue = method2.invoke(obj2, new Object[] {});
36                     map.put(field, "原值:" + oldValue.toString() + " 新值:" + newValue.toString());
37                 } catch (Exception e) {
38                     e.printStackTrace();
39                 }
40             }
41             return map;
42         }else {
43             Class clazz = obj2.getClass();
44             Field[] fields = clazz.getDeclaredFields();
45             for(Field field : fields){
46                 String fieldName = field.getName();
47                 String firstLetter = fieldName.substring(0,1).toUpperCase();
48                 String getter = "get" + firstLetter + fieldName.substring(1);
49                 try {
50                     Method method1 = obj1.getClass().getMethod(getter, new Class[]{});
51                     Method method2 = obj2.getClass().getMethod(getter, new Class[]{});
52                     Object oldValue = method1.invoke(obj1, new Object[] {});
53                     Object newValue = method2.invoke(obj2, new Object[] {});
54                     map.put(fieldName, "原值:" + oldValue.toString() + " 新值:" + newValue.toString());
55                 } catch (Exception e) {
56                     e.printStackTrace();
57                 }
58             }
59             return map;
60         }
61     }
62 
63 }

 

posted on 2019-10-29 16:55  我要的明天  阅读(558)  评论(0编辑  收藏  举报

导航