zoukankan      html  css  js  c++  java
  • java dbhelper

    import javax.naming.spi.DirStateFactory;
    import java.lang.reflect.Field;
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;
    
    public   class DBHelper {
      //  private static final String DRIVER = "com.mysql.jdbc.Driver";
       // private static final String URL = "jdbc:mysql://101.12.102.10:3306/test";
        //private static final String USER = "root";
        //private static final String PASSWORD = "123456";
    
        private static final String DRIVER = "com.mysql.jdbc.Driver";
        private static final String URL = "jdbc:mysql://rm-2ze66k2qxc95j13nl.mysql.rds.aliyuncs.com:3306/longfor_mdm";
        private static final String USER = "wydb003_rw";
        private static final String PASSWORD = "vzXYZ5h3MiDntZDtuCFE";
    
        private static DBHelper ins;
    
        public static DBHelper ins() {
            if (ins == null) {
                ins = new DBHelper();
            }
            return ins;
        }
    
    
        /**
         * 连接数据库
         *
         * @return 链接数据库对象
         */
        public Connection getConnection() {
            Connection conn = null;
            try {
                Class.forName(DRIVER);
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                conn = DriverManager.getConnection(URL, USER, PASSWORD);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return conn;
        }
    
        /**
         * 释放相应的资源
         *
         * @param rs
         * @param pstmt
         * @param conn
         */
        public void closeAll(ResultSet rs, PreparedStatement pstmt, Connection conn) {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (pstmt != null) {
                    pstmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        /**
         * 此方法可以完成增删改所有的操作
         *
         * @param sql
         * @param params
         * @return true or false
         */
        public boolean excuteUpdate(String sql, List<Object> params) {
            int res = 0;//受影响的行数
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            try {
                conn = getConnection();
                pstmt = conn.prepareStatement(sql);//装载sql语句
                if (params != null) {
                    //加入有?占位符,在执行之前把?占位符替换掉
                    for (int i = 0; i < params.size(); i++) {
                        pstmt.setObject(i + 1, params.get(i));
                    }
                }
                res = pstmt.executeUpdate();
    
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                closeAll(rs, pstmt, conn);
            }
            return res > 0 ? true : false;
        }
    
        /**
         * 使用泛型方法和反射机制进行封装
         *
         * @param sql
         * @param params
         * @param cls
         * @return
         */
        public <T> List<T> executeQuery(String sql, List<Object> params, Class<T> cls) throws Exception {
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            System.out.println("123");
    
            List<T> data = new ArrayList<T>();
            try {
                conn = getConnection();
                pstmt = conn.prepareStatement(sql);//装载sql语句
                if (params != null) {
                    //加入有?占位符,在执行之前把?占位符替换掉
                    for (int i = 0; i < params.size(); i++) {
                        pstmt.setObject(i + 1, params.get(i));
                    }
                }
                rs = pstmt.executeQuery();
                System.out.println("456");
    
                //把查询出来的记录封装成对应的实体类对象
                ResultSetMetaData rsd = rs.getMetaData();//获得列对象,通过此对象可以得到表的结构,包括,列名,列的个数,列的数据类型
                while (rs.next()) {
                    T m = cls.newInstance();
                    for (int i = 0; i < rsd.getColumnCount(); i++) {
                        String col_name = rsd.getColumnName(i + 1);//获得列名
                        Object value = rs.getObject(col_name);//获得列所对应的值
                        col_name=col_name.toLowerCase();
    
    
                        Field field = cls.getDeclaredField(col_name);
                        field.setAccessible(true);//给私有属性设置可访问权
                        field.set(m, value);//给对象的私有属性赋值
                    }
                    data.add(m);
                }
    
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                closeAll(rs, pstmt, conn);
            }
            return data;
        }
    
    
        public ResultSet executeQuerySql(String sql) {
            DirStateFactory.Result result = null;
            ResultSet rst = null;
            PreparedStatement pst = null;
            Connection con=this.getConnection();
            try {
    
                pst = this.getConnection().prepareStatement(sql);
    
                rst = pst.executeQuery();
    
    
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
            //    closeAll(rst, pst, con);
            }
            return rst;
        }
    }
    
  • 相关阅读:
    static 和final
    Integer中getInteger(),valueof()
    Integer和String "+""=="方法的不同
    java中Integer常量池
    用jvm指令分析String 常量池
    多线程、线程安全
    String字符串缓冲区、StringBuffer
    TCP通信---文件上传案例、多线程文件上传
    网络通信协议、UDP通信、TCP通信
    Java线程-- 线程池
  • 原文地址:https://www.cnblogs.com/tiancai/p/13093798.html
Copyright © 2011-2022 走看看