Fork me on GitHub

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());
    }

}

 

测试效果:

posted @ 2014-12-18 08:37  刘哥聊技术  阅读(9226)  评论(0编辑  收藏  举报