007、数据库工具类JdbcUtils

一、什么时候自己创建工具类?
如果一个功能经常要用到,我们建议把这个功能做成一个工具类,可以在不同的地方重用。

比如我们在JDBC程序中发现,每次都要获取连接对象,输入URL、密码、用户ing等操作,每次使用完都需要关闭资源,这些操作都是重复的,可以弄成一个工具类,方便调用。

二、目的:简化书写
* 分析:
    1. 注册驱动也抽取
    2. 抽取一个方法获取连接对象
        * 需求:不想传递参数(麻烦),还得保证工具类的通用性。
        * 解决:配置文件
            jdbc.properties
                url=
                user=
                password=

    3. 抽取一个方法释放资源

三、需求
上面写的代码中出现了很多重复的代码,可以把这些公共代码抽取出来。
7.2 创建类JdbcUtil包含3个方法:
1) 可以把几个字符串定义成常量:用户名,密码,URL,驱动类
2) 得到数据库的连接:getConnection()
3) 关闭所有打开的资源:

四、案例

JDBC.properties

#utl=jdbc:mysql://localhost:3306/myemployees
utl=jdbc:mysql://localhost:3306/sql_sel
user=root
password=tt1314521
driver=com.mysql.jdbc.Driver

JDBCUtils.JDBCUtils

import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.sql.*;
import java.util.Properties;

public class JDBCUtils {

    private static String utl;
    private static String user;
    private static String password;
    private static String driver;

    /**
     * 静态方法,只会执行一次后马上销毁
     */
    static{

        try {
            //创建Properties集合
            Properties properties = new Properties();
            //获取当前类的加载信息
            ClassLoader cl = JDBCUtils.class.getClassLoader();

            /*
            获取配置文件信息方式一
             */
            InputStream jdbc = cl.getResourceAsStream("JDBC.properties");
            properties.load(jdbc);

            /*
            获取配置文件方式二
             */
            /*URL ros = cl.getResource("JDBC.properties");
            String path = ros.getPath();
            properties.load(new FileReader(path));*/

            utl = properties.getProperty("utl");
            user = properties.getProperty("user");
            password = properties.getProperty("password");
            driver = properties.getProperty("driver");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    public static Connection getConnection(){
        Connection connection =null;
        try {
            Class.forName(driver);
            connection = DriverManager.getConnection(utl, user, password);
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }finally {
            return connection;
        }
    }

    /**
     *
     * @param stmt
     * @param conn
     */
    public static void close(Statement stmt, Connection conn){
        try {
            if(stmt != null){
                stmt.close();
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }


        try {
            if (conn != null){
                conn.close();
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     *
     * @param rest
     * @param stmt
     * @param conn
     */
    public static void close(ResultSet rest, Statement stmt, Connection conn){
        if (rest != null){
            try {

                rest.close();
            }
            catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(stmt != null){
            try {

                stmt.close();
            }
            catch (SQLException e) {
                e.printStackTrace();
            }
        }


        if (conn != null){
            try {
                conn.close();
            }catch (SQLException e) {
                e.printStackTrace();
            }

        }
    }
}
发布了287 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/l0510402015/article/details/104712562