JdbcUtils工具类代码

public class JdbcUtils {

    //加载properties类,只需要加载一次
    static Properties props = new Properties();
    //属性参数
    private static Connection conn = null;
    private static PreparedStatement pstmt = null;
    //静态代码块直接执行加载驱动类
    static{
        try {
            //加载src目录下的db.properties文件
            props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
            //加载驱动类
            Class.forName(props.getProperty("driverClassName"));
        
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 得到连接对象
     * @return Connection
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException{
            conn = DriverManager.getConnection(props.getProperty("url"),props.getProperty("user"),props.getProperty("password"));
            return conn;    
    }
    
    /**
     * 关闭资源  --倒序关闭
     * @param rs  结果集
     */
    public static void close(ResultSet rs){
        try {
            if(rs != null){
                rs.close();
            }
            if(pstmt != null){
                pstmt.close();
                //还原初始值
                pstmt = null;
            }
            if(conn != null){
                conn.close();
                //还原初始值
                conn = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 增删改方法
     * @param sql sql语句
     * @param params ?参数
     * @return 受影响的函数
     */
    public static int executeUpdate(String sql,Object...params){
        
        try {
            conn = JdbcUtils.getConnection();
            //sql语句调用者传递
            pstmt = conn.prepareStatement(sql);
            //给参数赋值
            if(params != null && params.length > 0){
                for (int i = 0; i < params.length; i++) {
                    //pstat.setDate(parameterIndex, x);  //需要的java.sql.Date
                    // 需要把java.util.Date 转换为java.sql.Date
                    //  java.util.Date 是java.sql.Date的父类
                    // java.util.Date 赋值给java.sql.Date   把父类转换为子类   不能强制类型转换
                    //java.sql.Date的构造方法:
                    //Date(long date)   使用给定的毫秒时间值构造一个 Date对象。  
                    //而java.util.Date 中long getTime()   获取当前时间的毫秒值
                    if(params[i] instanceof java.util.Date){
                        java.util.Date hiredate = (java.util.Date)params[i];
                        pstmt.setDate(i+1,new java.sql.Date(hiredate.getTime()));
                        
                    }else{
                        pstmt.setObject(i+1, params[i]);
                    }
                }
            }
            return pstmt.executeUpdate();
        } catch (SQLException e) {
            //e.printStackTrace();
            //手动抛一个运行时异常给调用者
            throw new RuntimeException(e);
        }finally{
            JdbcUtils.close(null);
        }
    }
    
    /**
     * 查询方法
     * @param sql sql语句
     * @param params ?参数
     * @return 返回结果集
     */
    public static ResultSet executeQuery(String sql,Object...params){
        ResultSet rs = null;
        try {
            conn = JdbcUtils.getConnection();
            //sql语句由调用者提供
            pstmt = conn.prepareStatement(sql);
            //给参数赋值
            if(params != null && params.length > 0){
                for (int i = 0; i < params.length; i++) {
                    pstmt.setObject(i+1, params[i]);
                }
            }
            rs = pstmt.executeQuery();
            return rs;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

}

 

posted @ 2020-05-07 22:16  64Byte  阅读(256)  评论(0编辑  收藏  举报