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;
        }
    }
    
  • 相关阅读:
    pat 甲级 1065. A+B and C (64bit) (20)
    pat 甲级 1064. Complete Binary Search Tree (30)
    pat 甲级 1010. Radix (25)
    pat 甲级 1009. Product of Polynomials (25)
    pat 甲级 1056. Mice and Rice (25)
    pat 甲级 1078. Hashing (25)
    pat 甲级 1080. Graduate Admission (30)
    pat 甲级 团体天梯 L3-004. 肿瘤诊断
    pat 甲级 1099. Build A Binary Search Tree (30)
    Codeforce 672B. Different is Good
  • 原文地址:https://www.cnblogs.com/tiancai/p/13093798.html
Copyright © 2011-2022 走看看