当前位置: 首页 > news >正文

jdbc ResultSet 处理工具类DbUtil

为什么80%的码农都做不了架构师?>>>   hot3.png

直接贴代码哈。。。

package cang.yan.utils;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 数据库查询结果POJO转换
 * @author chenyl
 */
public class DbUtil{
    private static final char SEPARATOR = '_'; 
    public static <T> T toBean(Class<T> clazz,ResultSet rs) throws Exception{
        if(!rs.next()){
            return null;
        }
        T t = clazz.newInstance();
        ResultSetMetaData rsmd = rs.getMetaData();
        int len = rsmd.getColumnCount();
        Map<String,Method> mm = getSetMethod(clazz);
        for(int i = 1; i <= len; i++){
            String label = rsmd.getColumnLabel(i);
            Method m = mm.get(lineToCamel(label, true));
            if(m!=null){
                m.invoke(t, rs.getObject(label));
            }
        }
        return t;
    }
    
    public static Map<String, Object> toMap(ResultSet rs) throws Exception{
        Map<String, Object> map = new HashMap<String, Object>();
        if(!rs.next()){
            return null;
        }
        ResultSetMetaData rsmd = rs.getMetaData();
        int len = rsmd.getColumnCount();
        for(int i = 1; i <= len; i++){
            String label = rsmd.getColumnLabel(i);
            map.put(lineToCamel(label,false), rs.getObject(label));
        }
        return map;
    }
    
    public static Map<String, Object> toStrMap(ResultSet rs) throws Exception{
        Map<String, Object> map = new HashMap<String, Object>();
        if(!rs.next()){
            return null;
        }
        ResultSetMetaData rsmd = rs.getMetaData();
        int len = rsmd.getColumnCount();
        for(int i = 1; i <= len; i++){
            String label = rsmd.getColumnLabel(i);
            Object obj = rs.getObject(label);
            if(obj instanceof java.sql.Timestamp){
                java.sql.Timestamp ts = (java.sql.Timestamp)obj;
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                map.put(lineToCamel(label,false), format.format(new Date(ts.getTime())));
            }else if(obj instanceof java.util.Date){
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                map.put(lineToCamel(label,false), format.format((Date)obj));
            }else{
                map.put(lineToCamel(label,false), rs.getString(label));
            }
        }
        return map;
    }
    
    public static <T> List<T> toList(Class<T> clazz,ResultSet rs) throws Exception{
        List<T> list = new ArrayList<T>();
        while(true){
            T t = toBean(clazz, rs);
            if(t==null){
                break;
            }
            list.add(t);
        }
        return list;
    }
    
    public static List toList(ResultSet rs) throws Exception {
        List list = new ArrayList();
        while(true){
            Map m = toMap(rs);
            if(m==null){
                break;
            }
            list.add(m);
        }
        return list;
    }
    
    public static List toStrList(ResultSet rs) throws Exception{
        List list = new ArrayList();
        while(true){
            Map m = toStrMap(rs);
            if(m==null){
                break;
            }
            list.add(m);
        }
        return list;
    }
    
    private static Map<String,Method> getSetMethod(Class<?> clazz){
        Map<String,Method> map = new HashMap<String, Method>();
        Method[] array = clazz.getMethods();
        int len = array.length;
        for(int i =0 ; i < len; i++){
            Method m = array[i];
            if(m.getName().startsWith("set")&& m.getParameterTypes().length==1){
                map.put(m.getName().substring(3), m);
            }
        }
        return map;
    }
    public static String lineToCamel(String str,boolean firstUpperCase){
        if(str==null || str.length() == 0){
            return str;
        }
        str = str.toLowerCase();
        int len = str.length();
        StringBuffer sb = new StringBuffer();
        boolean upperCase = firstUpperCase;
        for(int i = 0; i < len; i++){
            char c = str.charAt(i);
            if(c==SEPARATOR){
                upperCase = true;
                continue;
            }
            if(upperCase){
                sb.append(Character.toUpperCase(str.charAt(i)));
                upperCase = false;
            }else{
                sb.append(str.charAt(i));
            }
        }
        return sb.toString();
    }
    public static String camelToLine(String str) throws Exception{
        if(str==null || str.length() == 0){
            return str;
        }
        StringBuilder sb = new StringBuilder();  
        boolean nextIsUpperCase = false;  
        int len = str.length();
        for(int i = 0; i < len; i++){
            char c = str.charAt(i);
            if(i<len-1){
                nextIsUpperCase = Character.isUpperCase(str.charAt(i+1));
            }else{
                nextIsUpperCase = false;
            }
            if(Character.isLowerCase(c)&& nextIsUpperCase){
                if(i<len-1){
                    sb.append(c).append(SEPARATOR).append(Character.toLowerCase(str.charAt(i+1)));
                    i++;
                }else{
                    sb.append(c).append(SEPARATOR);
                }
                
            }else if(Character.isUpperCase(c)&& !nextIsUpperCase && i > 0){
                sb.append(SEPARATOR).append(Character.toLowerCase(str.charAt(i)));
            }else{
                sb.append(Character.toLowerCase(c));
            }
            
        }
        return sb.toString();
    }
    
    
    public static void close(ResultSet rs) throws SQLException {
        if(rs!=null){
            rs.close();
        }
    }
    
    public static void close(Connection conn) throws SQLException{
        if(conn!=null){
            conn.close();
        }
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/cangy/blog/284003

相关文章:

  • 结构之美——优先队列基本结构(四)——二叉堆、d堆、左式堆、斜堆
  • web app开发——使用jQuery Mobile创建餐厅订餐应用
  • Python 格式符大聚会之​%r
  • 电压放大和电流放大区分
  • 未来地图,开启万物互联-华中雄
  • 搭建Struts框架
  • Windows下Lisp环境配置
  • 定时休息护眼神器(EyeDefender)护眼大法
  • android 屏幕适配问题
  • .Net程序帮助文档制作
  • MySQL备份与恢复常用方法总结(mysqldump/xtrabackup/lvm快照备份/逻辑备份与恢复/二进制日志及时点恢复)...
  • samba服务的安装与配置
  • 关于sqlmap的一些命令
  • Nothing2
  • Download Images Using NSURLConnection
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 77. Combinations
  • Apache的基本使用
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JavaScript对象详解
  • Java精华积累:初学者都应该搞懂的问题
  • leetcode388. Longest Absolute File Path
  • mongo索引构建
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • nodejs实现webservice问题总结
  • React+TypeScript入门
  • select2 取值 遍历 设置默认值
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 反思总结然后整装待发
  • 给Prometheus造假数据的方法
  • 诡异!React stopPropagation失灵
  • 基于webpack 的 vue 多页架构
  • 前端面试题总结
  • 实习面试笔记
  • 一起参Ember.js讨论、问答社区。
  • Spring第一个helloWorld
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • $(selector).each()和$.each()的区别
  • ( 10 )MySQL中的外键
  • (1)(1.11) SiK Radio v2(一)
  • (1)(1.13) SiK无线电高级配置(五)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (多级缓存)多级缓存
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (三)模仿学习-Action数据的模仿
  • (三十五)大数据实战——Superset可视化平台搭建
  • (一)Neo4j下载安装以及初次使用
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题