文档章节

自己设计的jdbc封装的程序,可自己修改,目前本人已改成用xml配置sql

 可可狼
发布于 2017/03/25 09:16
字数 1283
阅读 35
收藏 2

package com.uw.dao;

import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.uw.cache.DataCaches;
import com.uw.util.XmlManager;

public class UWdao implements DaoInterface{

    protected Connection con = null;
    protected PreparedStatement ps = null;
    protected Statement st = null;
    protected ResultSet rs = null;
    
    IPoolManager pm = new PoolManager();
    XmlManager xmlManager = new XmlManager();
    
    public final void createConnection(String dbName) {
        // TODO Auto-generated method stub
        con = pm.get(dbName);
    }

    /**
     * @author 查询多字段,一行一行查询
     * */
    public final List<Map<String,String>> selectDataColumn(String sql){
        System.out.println("开始执行语句---->" + sql);
        List<Map<String,String>> listMap = new ArrayList<Map<String,String>>();
        try {
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery(); 
            ResultSetMetaData rsmd = rs.getMetaData();
            int rc = rsmd.getColumnCount();
            while(rs.next()){
                Map<String,String> mapdata = new HashMap<String,String>();
                for(int i=1;i<=rc;i++){
                    String field = rsmd.getColumnLabel(i);
                    mapdata.put(field, rs.getString(field));
                }
                listMap.add(mapdata);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return listMap;
    }
    
    /**
     * @author 查询单行数据,第一行
     * */
    public final Map<String,String> selectOneRowData(String sql){
        System.out.println("开始执行语句---->" + sql);
        Map<String,String> map = new HashMap<String,String>();
        try {
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
            ResultSetMetaData rsmd = rs.getMetaData();
            int rsmdCount = rsmd.getColumnCount();
            if(rs.next()){
                for(int i=1;i<=rsmdCount;i++){
                    String fieldName = rsmd.getColumnLabel(i);
                    String fieldData = rs.getString(fieldName);
                    map.put(fieldName, fieldData);
                }
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return map;
    }
    
    /**
     * 查询kv数据,一个字段数据做key,一个字段数据做v
     * @param sql sql语句
     * @param key key字段
     * @param val value字段
     * @return Map<String,String>
     */
    public final Map<String,String> selectKVColumn(String sql,String key,String val){
        Map<String,String> dataMap = new HashMap<String,String>();
        try {
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()){
                String kfielddata = rs.getString(key);
                String vfielddata = rs.getString(val);
                dataMap.put(kfielddata, vfielddata);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return dataMap;
    }
    
    /**
     * @author 单个字段查询List数据
     * */
    public final List<String> selectColumnAllData(String sql,String columnName){
        System.out.println("开始执行语句---->" + sql);
        List<String> listStr = new ArrayList<String>();
        try {
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()){
                listStr.add(rs.getString(columnName));
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return listStr;
    }
    
    /**
     * @author 单个字段查询单条数据查询
     * */
    public final String selectColumnOneData(String sql,String columnName){
        System.out.println("开始执行语句---->" + sql);
        String data = "";
        try {
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
            if(rs.next()){
                data = rs.getString(columnName);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return data;
    }
    
    /**
     * 提取定义字段为最外层key,其它数据做value中的key存储
     * @param sql
     * @param kcolumn
     * @return
     */
    public final Map<String,Map<String,String>> getKStr_VMap(String sql,String kcolumn){
        System.out.println("开始执行语句---->" + sql);
        Map<String,Map<String,String>> mapMap = new HashMap<String,Map<String,String>>();
        try {
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery(); 
            ResultSetMetaData rsmd = rs.getMetaData();
            int rc = rsmd.getColumnCount();
            while(rs.next()){
                Map<String,String> mapdata = new HashMap<String,String>();
                String cur_mapMapK = "";
                rcfor:
                for(int i=1;i<=rc;i++){
                    String field = rsmd.getColumnLabel(i);
                    if(field.equals(kcolumn)){
                        cur_mapMapK = rs.getString(field);
                        continue rcfor;
                    }else{
                        mapdata.put(field, rs.getString(field));
                    }
                }
                mapMap.put(cur_mapMapK, mapdata);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return mapMap;
    }
    
    /**
     * 提取定义字段为最外层key,其它数据做value中的list存储,查询相同的key
     * @param sql
     * @param kcolumn
     * @return
     */
    public final Map<String,List<Map<String,String>>> getKStr_VListMap(String sql,String kcolumn){
        System.out.println("开始执行语句---->" + sql);
        Map<String,List<Map<String,String>>> mapMap = new HashMap<String,List<Map<String,String>>>();
        try {
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery(); 
            ResultSetMetaData rsmd = rs.getMetaData();
            int rc = rsmd.getColumnCount();
            List<Map<String,String>> lm = null;//new ArrayList<Map<String,String>>();
            while(rs.next()){
                Map<String,String> mapdata = new HashMap<String,String>();
                String cur_K = "";
                for(int i=1;i<=rc;i++){
                    String field = rsmd.getColumnLabel(i);
                    if(field.equals(kcolumn)){
                        cur_K = rs.getString(field);
                    }else{
                        mapdata.put(field, rs.getString(field));
                    }
                }
                if(mapMap.containsKey(cur_K)){
                    lm = mapMap.get(cur_K);
                    lm.add(mapdata);
                }else{
                    lm = new ArrayList<Map<String,String>>();
                    mapMap.put(cur_K, lm);
                    lm.add(mapdata);
                }
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return mapMap;
    }
    
    /**
     * 一个字段做key,一个字段做val,val为list,查询相同的key
     * @param sql
     * @param kcolumn
     * @param vcolumn
     * @return
     */
    public final Map<String,List<String>> getKStr_VList(String sql,String kcolumn,String vcolumn){
        System.out.println("开始执行语句---->" + sql);
        Map<String,List<String>> mapMap = new HashMap<String,List<String>>();
        try {
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery(); 
            ResultSetMetaData rsmd = rs.getMetaData();
            int rc = rsmd.getColumnCount();
            while(rs.next()){
                for(int i=1;i<rc;i++){
                    String dataK = rs.getString(kcolumn);
                    String dataV = rs.getString(vcolumn);
                    if(mapMap.containsKey(dataK)){
                        mapMap.get(dataK).add(dataV);
                    }else{
                        List<String> dataList = new ArrayList<String>();
                        dataList.add(dataV);
                        mapMap.put(dataK, dataList);
                    }
                }
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return mapMap;
    }
    
    /**
     * @author 事物执行
     * */
    public final boolean operatorSql(String sql){
        boolean b = false;
        System.out.println("开始执行语句---->" + sql);
        try {
            con.setAutoCommit(false);
            ps = con.prepareStatement(sql);
            ps.execute();
            con.commit();
            b = true;
        } catch (SQLException e) {
            try {
                con.rollback();
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }finally{
                b = false;
                e.printStackTrace();
            }
        }
        return b;
    }
    
    /**
     * @author 批执行,list必须为ArrayList
     * */
    public final void batchStatement(List listStr){
        System.out.println("开始处理批量sql的执行------->"+listStr.get(0).toString());
        try {
            con.setAutoCommit(false);
            st = con.createStatement();
            int sl = listStr.size();
            if(sl != 0 && sl > 45000){
                int slcy = sl/45000;
                int slys = sl%45000;
                for(int i=0;i<slcy;i++){
                    for(int j=i*45000;j<(i+1)*45000;j++){
                        st.addBatch(listStr.get(j).toString());
                    }
                }
                st.executeBatch();
                con.commit();
                st.clearBatch();
                if(slys > 0){
                    for(int i=(slcy*45000);i<(slcy*45000+slys);i++){
                        st.addBatch(listStr.get(i).toString());
                    }
                    st.executeBatch();
                    con.commit();
                }
            }else{
                for(int i=0;i<sl;i++){
                    st.addBatch(listStr.get(i).toString());
                }
                st.executeBatch();
                con.commit();
            }
        } catch (SQLException e) {
            try {
                con.rollback();
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    }
    
    public void closeConnection(String dbname) {
        // TODO Auto-generated method stub
         try {
            if(con!=null){
                pm.freeCon(con, dbname);
             }
             if(st != null){
                 st.close();
                 st = null;
             }
             if(ps != null){
                 ps.close();
                 ps = null;
             }
             if(rs != null){
                 rs.close();
                 rs = null;
             }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public List<Object> selectDataColumn_obj(String sql, String classStr,String isCache,String cacheid) {
        System.out.println("开始执行语句---->" + sql);
        try {
            List<Object> objList = new ArrayList<Object>();
            Class<?> clazz = Class.forName(classStr);
            Field[] fields = clazz.getDeclaredFields();
            int fieldsLength = fields.length;
            if(fieldsLength==0){
                throw new Exception("无字段空对象异常");
            }
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
            Object[] mos = null;
            Object o = null;
            while(rs.next()){
                o = clazz.newInstance();
                for(int i=0;i<fieldsLength;i++){
                    String cur_fieldName = fields[i].getName();
                    if(cur_fieldName.equals("serialVersionUID")){
                        continue;
                    }
                    String cur_data=rs.getString(cur_fieldName);
                    cur_fieldName = cur_fieldName.substring(0, 1).toUpperCase()+cur_fieldName.substring(1);
                    String setMethodName = "set"+cur_fieldName;
                    Class[] cls = new Class[]{String.class};
                    Method method = clazz.getDeclaredMethod(setMethodName, cls);
                    mos = new Object[]{cur_data};
                    method.invoke(o, mos);
                }
                objList.add(o);
            }
            if(isCache.equals("true")){
                DataCaches dataCache = new DataCaches();
                dataCache.setCache(cacheid, objList);
            }
        return objList;
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
    
    public static void main(String[] args) {
        /*XmlManager xm = new XmlManager();
        File file = new File("F:/svn2111/MyaiopCode/src/uw-bin.xml");
        xm.setXmlManagerFile(file);
        xm.init();
        PoolManager pm = new PoolManager();
        pm.createPool();
        Test t = new Test(pm);
        t.test1();*/
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Connection con = DriverManager.getConnection("jdbc:sqlserver://192.168.1.58:1433; DatabaseName=aaa","sa","123");
            System.out.println(con==null);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
}

© 著作权归作者所有

粉丝 0
博文 1
码字总数 1283
作品 0
北海
私信 提问
加载中

评论(1)

红薯
红薯
这种纯代码的建议放到码云上:)
自己手写一个Mybatis框架(简化)

继上一篇手写SpringMVC之后,我最近趁热打铁,研究了一下Mybatis。MyBatis框架的核心功能其实不难,无非就是动态代理和jdbc的操作,难的是写出来可扩展,高内聚,低耦合的规范的代码。本文完...

我叫刘半仙
2018/03/07
2.9K
3
求一个暑假的兼职,最好在福州(福清最好),工资不要求,适当即可,回校后可继续帮忙做事,内含有本人的个人信息

本人目前是大二在校生: 目前学习了: j2se, html, css, c, xml, 数据库的增删改查(稍微了解sql server 2000,oracle), 做过小型的mis系统(学生管理系统), 编写过坦克大战的程序, 经常用的IDE...

呆丫丫424
2012/05/27
663
7
mybatis Generator 实现与插件

PluginAdaptor 是适配器设计模式吗? 首先我觉得是模板方法设计模式,用接口定义执行顺序,你可以对其中的一些方法做自定义开发 从自定义开发方法,如果想在执行过程中使用,必须满足接口要求...

Java搬砖工程师
2018/10/11
183
0
SQL--( 初识 MyBatis)

MyBatis介绍 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手...

姜白告
2018/08/06
0
0
java框架学习日志-13(Mybatis基本概念和简单的例子)

在mybatis初次学习Mybatis的时候,遇到了很多问题,虽然阿里云的视频有教学,但是视频教学所使用的软件和我自己使用的软件不用,我自己用的数据库是oracle数据库,开发环境是idea。而且视频中...

白话
02/23
30
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么Netty的FastThreadLocal速度快

前言 最近在看netty源码的时候发现了一个叫FastThreadLocal的类,jdk本身自带了ThreadLocal类,所以可以大致想到此类比jdk自带的类速度更快,主要快在什么地方,以及为什么速度更快,下面做一...

ksfzhaohui
20分钟前
4
0
资治通鉴解析:无论什么条件,要挟权力做出承诺,都会被清算

电影《满城尽带黄金甲》里有句经典的名言“朕赐给你的,才是你的。朕不给你的,你不能抢。”之所以这段话有名,核心的就是,它揭示了这样一个权力心思:无论什么情况,权力的行使,都不愿意受...

太空堡垒185
24分钟前
3
0
CSS技巧之向下箭头

本文转载于:专业的前端网站➫CSS技巧之向下箭头 思路: 使用◇符号(可在输入法的软键盘找到该符号),使用定位选择位置,并隐藏溢出的上半部分 细点: 1.使用i标签的楷体属性把◇变大 2.给i...

前端老手
40分钟前
2
0
SpringCloud alibaba微服务之NACOS多环境配置整合

前言 伴随着spring cloud alibaba 登上主板以后,我就去了解下感觉还是蛮不错的。说实话第一次看见Nacos好长一段时间连读法都不知道...(/nɑ:kəʊs/)。按照官方的话说Nacos是:一个更易于...

攻城狮-飞牛
43分钟前
4
0
tcpdump

tcpdump -A -s0 port 21011 -i any (1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型 (2)-i eth1 : 只抓经过接口eth1的包 (3)-t : 不显...

mskk
48分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部