黑马程序员技术交流社区

标题: 厉害的我的黑马 [打印本页]

作者: gaogan2017    时间: 2018-8-16 08:38
标题: 厉害的我的黑马
本帖最后由 gaogan2017 于 2018-8-16 08:48 编辑

刚来的我是这样的:
[Java] 纯文本查看 复制代码

package first;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
   }
}

现在的我是这样的:



[Java] 纯文本查看 复制代码

JDBCUtils  工具类
/**
* 抽取工具类
* 需要抽取的
* 注册驱动
* 抽取的获取连接的方法
*/
public class JDBCUtils {//所以工具类的方法都是静态的方便调用
    /**
     * 不想传参(麻烦) 但还要有通用性
     * 使用配置文件的形式来解决
     * 文件的读取只需要读取一次就可以了,不然每次调用该工具类每次都会做无用的读取
     * 所以使用静态代码块
     */
    //设置静态是为了让下面的静态代码块读到
    private static String url;
    private static String user;
    private static String password;
    private static String driver;

    //静态代码块
    static {
        Properties pro = new Properties();
        InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
        try {
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //把从配置文件中读取到的信息赋值给三个成员变量
        url = pro.getProperty("url");
        user = pro.getProperty("user");
        password = pro.getProperty("password");
        driver = pro.getProperty("driver");

        //注册驱动(也想做成通用的)
        try {

            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取连接*
     * @return conn连接对象
     */
    public static Connection geConnection() throws SQLException {
        
        return DriverManager.getConnection(url, user, password);
    }
    /**
     * 释放资源*
     * @param conn
     * @param state
     */
    public static void close(PreparedStatement state, Connection conn) {
        if (state != null) {
            try {
                state.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        //不可以写在同一个try里面,防止state出现异常导致conn无法执行;
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 释放资源  重载加上ResultSet 结果集*
     * @param conn
     * @param state
     */
    public static void close(ResultSet rs, PreparedStatement state, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (state != null) {
            try {
                state.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

测试类:

//测试工具类
public class UtilsTest {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            //调用工具类方法 可以替换注册和连接的步骤
            conn = JDBCUtils.geConnection();
            String sql = "SELECT * FROM emp WHERE gender = ?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setObject(1, "男");
            rs = pstmt.executeQuery();

            while (rs.next()) {
                Object id = rs.getObject("id");
                Object name = rs.getObject("name");
                Object salary = rs.getObject("salary");
                Object join_date = rs.getObject("join_date");
                Object dept_id = rs.getObject("dept_id");
                System.out.println(id + "---" + name + "---" + salary + "---" + join_date + "---" + dept_id);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //关闭更便捷
            JDBCUtils.close(rs, pstmt, conn);
        }
    }
}














欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2