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;
    }
}

 

posted @ 2020-06-11 15:59  甜菜波波  阅读(400)  评论(0编辑  收藏  举报