• Java -- JDBC学习笔记4、封装工具类


    1、为什么要封装工具类?

    • 首先,使用Java编程是面向对象编程,面向对象有三大核心特性,其中有一大特性就是"封装"。
    • 一个项目中不可能只有一个功能模块需要对数据库进行操作,有好多功能模块都需要进行访问数据库,操作数据。
    • 在对数据库进行访问、操作、等一些步骤都是重复的,比如:注册驱动,获取连接对象,释放连接资源等等。所以,要把这些重复的代码提取,单独放到一个类中,进行封装。做成一个JDBC专用工具类,以后每次对数据库进行访问就使用该工具类。

    2、重构方案

    • 将注册驱动代码写在静态代码块中,因为注册驱动只注册一次即可。
    • 将获取数据库连接对象代码封装为一个方法。
    • 将释放连接对象资源代码封装为一个方法。

    3、具体实现

    新建一个Java类,取名为DBUtils,上边是静态代码块、注册驱动,下边两个静态方法、获取连接对象和释放资源。

    3.1、注册驱动

    static
        {
            try
            {
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            }
            catch (ClassNotFoundException e)
            {
                e.printStackTrace();
            }
        }
    

    3.2、获取连接

    public static Connection getConnection()
        {
            Connection conn = null;
            //数据库连接字符串
            String url = "jdbc:sqlserver://localhost:1433;databaseName=StudentManage";
            try
            {
                //获取连接对象
                conn = DriverManager.getConnection(url, "sa", "sql2012");
            }
            catch (SQLException sqlException)
            {
                sqlException.printStackTrace();
            }
            return conn;
        }
    

    3.3、释放资源

    public static void closeDb(Connection conn, Statement sm, ResultSet rs)
        {
            try
            {
                if (conn != null)
                {
                    conn.close();
                }
                if (sm != null)
                {
                    sm.close();
                }
                if (rs != null)
                {
                    rs.close();
                }
            }
            catch (SQLException sqlException)
            {
                sqlException.printStackTrace();
            }
        }
    
    • 注意、第二个参数使用的是Statement类型,这样不管是Statement还是PreparedStatement都可以接收
    • 因为PreparedStatement接口继承Statement接口。

    4、优化DBUtils类

    以上重构方案虽然将连接数据库可重用性代码提取出来做成JDBC工具类,但是整体耦合度还是相对较高,比如、数据库连接字符串,用户名,登录密码这些值都是写死在Java类中。

    • 如果需要更换数据库,将SQLserver换成MYSQL,那么就需要先修改驱动jar包和url,再重新编译项目,因为Java代码改动了,所以要重新编译。
    • 同样、不管是修改url,还是用户名密码,驱动jar包,都需要改代码,重新编译项目。

    4.1、优化方案

    • 将注册驱动使用的jar包路径和getConnection()方法中的三个参数、url、用户名、登录密码提取,放到配置文件中。

    4.2、具体实现

    • 首先、在Java web项目中的src文件下新建一个配置文件,取名为:jdbc.properties。里边内容如下:
    dirver = com.microsoft.sqlserver.jdbc.SQLServerDriver
    url = jdbc:sqlserver://localhost:1433;databaseName=StudentManage
    user = sa
    passwrod = sql2012
    
    • 在DBUtils类中定义全局静态常量ResourceBundle和连接池对象。
    private static final ResourceBundle resourceBundel;
    
    • 加载驱动,使用resourceBundel从配置文件中动态获取。
    static
        {
            //加载配置文件
            resourceBundel = ResourceBundle.getBundle("jdbc");
            try
            {
                //从配置文件中获取dirver的值
                Class.forName(resourceBundel.getString("dirver"));
            }
            catch (ClassNotFoundException e)
            {
                e.printStackTrace();
            }
        }
    
    • 获取连接对象,从配置文件中读取url、用户名、密码。
    public static Connection getConnection()
        {
            Connection connection = null;
            try
            {
                //创建连接对象
                //里边的参数都从配置文件中读取
                connection = DriverManager.getConnection(resourceBundel.getString("url"), resourceBundel.getString("user"), resourceBundel.getString("password"));
                
            }
            catch (SQLException sqlException)
            {
                sqlException.printStackTrace();
            }
            return connection;
        }
    

    这样,不管是修改数据库还是登录密码,只需在配置文件中修改即可,无需改动Java代码。更不需要从新编译。概括来讲、就是要通过一些重构方案,降低代码的耦合度,从而提高代码的可扩展性。

  • 相关阅读:
    Ubuntu 服务器默认的root账号是没有激活的,需要用初装的用户账号给root设置管理密码
    MySQL忘记root密码重置密码(5.7版本)
    SpringMvc与前台ajax数据传递
    将http://localhost:8080设置为项目主页
    javaweb项目主页设置
    Redis在java开发中使用
    eclipse基于git上传项目到码云上
    spring配置tomcat jdbc pool数据库连接池
    run as maven build时报错
    Tomcat-Jdbc-Pool连接池参数说明
  • 原文地址:https://www.cnblogs.com/dcy521/p/14729570.html
Copyright © 2020-2023  润新知