• JDBC实例--通过连接工具类DBUtil +配置文件来获取连接数据库,方便又快捷


    根据前面的连接方法,还有缺点就是,如果人家要换数据库,还得改动源代码,然后还要编译什么的。这样客户修改也不容易。

     做法:我们写一个配置文件,把该数据写在配置文件上面,然后通过类来加载改文件,然后读取相应的数据。这样就可以解决了换数据库的问题,我们只需要改动配置文件就可以了,不用动源代码。


    详细的步骤:

    一、通过连接工具类获取连接

    在工程中,通常编写一个访问数据库的工具类,此后所有访问数据库的操作,都从工具类中获取连接。

    实现工具类的两种方式:
    • 直接把数据配置写在工具类。
    • 把数据库配置写在一个properties属性文件里,工具类读入属性文件,逐行获取数据库参数。
    建议使用第二种。


    二、通过属性文件维护连接属性

    db.properties的内容:
    #驱动类名
    jdbc.driver=com.mysql.jdbc.Driver
    #连接字符串
    jdbc.url=jdbc:mysql://localhost:3306/csdn
    #访问数据库的用户名
    jdbc.user=root
    #访问数据库的密码
    jdbc.password=123456


    注意:在properties文件中,#符号表示注释。


    三、从类路径中加载属性文件

    定义好db.properties之后,需要在Java程序中找到它,可以使用从类路径加载的方式:

    //属性文件所在的位置
    String path = "com/daliu/jdbc/db.properties";
    //获得当前类的路径,加载指定属性文件
    properties.load(DBUtil.class.getClassLoader().getResourceAsStream(path));

    四、连接的关闭

    在工具类中定义公共的关闭连接的方法,所有访问数据库的应用,共享此方法。当完成功能,关闭连接。

    protected static void closeConnection(Connection conn) {
             if (conn != null) {
                 try {
                     con.close();
                 } catch (SQLException e) {
                         e.printStackTrace();
                 }
             }
         }

    首先新建一个java工程,导入所需要的包,新建一个配置文件,如下图:

    db.properties文件代码如下:

    1 jdbc.driver=com.mysql.jdbc.Driver
    2 jdbc.url=jdbc:mysql://localhost:3306/csdn
    3 jdbc.user=root
    4 jdbc.password=123456

    DBUtil的代码如下:

    package com.daliu.jdbc;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.util.Properties;
    
    /**
     * 使用配置文件来配置JDBC连接数据库 该类用来管理数据库的连接
     */
    public class DBUtil {
        // 连接数据库的路径
        public static String url;
        // 连接数据库的用户名
        public static String user;
        // 连接数据库的密码
        public static String pwd;
    
        public static String driver;
    
        // 静态块
        static {
            try {
                // 读取配置文件
                Properties prop = new Properties();
                /*
                 * 这种写法是将来更加推荐的相对路径 写法。
                 */
                InputStream is = DBUtil.class.getClassLoader().getResourceAsStream(
                        "com/daliu/jdbc/db.properties");
    
                prop.load(is);
                is.close();
                // 获取驱动
                driver = prop.getProperty("jdbc.driver");
                // 获取地址
                url = prop.getProperty("jdbc.url");
                // 获取用户名
                user = prop.getProperty("jdbc.user");
                // 获取密码
                pwd = prop.getProperty("jdbc.password");
    
                // 注册驱动
                Class.forName(driver);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 获取一个连接
         * 
         * @return
         * @throws Exception
         */
        public static Connection getConnection() throws Exception {
            try {
                /*
                 * 通过DriverManager创建一个数据库的连接 并返回
                 */
                Connection conn = DriverManager.getConnection(url, user, pwd);
                /*
                 * ThreadLocal的set方法 会将当前线程作为key,并将给定的值 作为value存入内部的map中保存。
                 */
    
                return conn;
            } catch (Exception e) {
                e.printStackTrace();
                // 通知调用者,创建连接出错
                throw e;
            }
        }
    
        /**
         * 关闭给定的连接
         */
        public static void closeConnection(Connection conn) {
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 测试是否连接成功
         * @param args
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {
            System.out.println(getConnection());
        }
    
    }

    测试效果:

  • 相关阅读:
    [置顶] 移动应用不得不看的三张图
    重新签名apk文件(手工用命令行)
    o(n)解决问题:调整数组顺序是奇数位于偶数的前面
    安装DBMS_SHARED_POOL包
    sql server 实现sleep延时
    【Unity 3D】使用 2DToolkit 插件 制作2D精灵动画
    消息对话框(MessageBox)用法介绍
    java监控之ManagementFactory分析
    Java内存模型深度解析:总结--转
    Java内存模型深度解析:final--转
  • 原文地址:https://www.cnblogs.com/liuhongfeng/p/4170902.html
Copyright © 2020-2023  润新知