【JDBC】实现对JDBC 连接的简单封装

package util;

import java.sql.Connection;
import java.sql.DriverManager;

/***
 * 实现对JDBC 的封装
 * @author mqy
 *
 */
public class JdbcUtil {

    private JdbcUtil() {
        
    }
    private static String driverClassName = "com,mysql.jdbc.Driver";
    private static String url = "jdbc:mysql:///jdbcdemo";
    private static String user = "root";
    private static String password = "root";
    //使用静态代码块实现 jdbcUtil的字节码被加载锦jvm中 并且只执行一次。避免每次使用都注册
    static{
        try {
            Class.forName(DriverClassName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //提供外界访问 
    public static Connection getConn(){
        try {
            return DriverManager.getConnection(url, user, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }    
}

 关闭资源

    //关闭资源  查询方法关闭资源 JdbcUtil.close(conn,st,rs)
    //增删改 关闭资源JdbcUtil.close(conn,st,null)
    public static void close(Connection conn,Statement st,ResultSet rs){
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if (st != null) {
                    st.close();
                }    
            } catch (Exception e2) {
                e2.printStackTrace();
            }finally {
                    try {
                        if (conn != null) {
                        conn.close();
                        }
                        } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
}

 注意:⚠️上面的简单封装,虽然解决了在使用过程中书写重复代码的问题,不过还存在一个问题,那就是将数据库的基本信息写死在了源代码中,这样不利于维护,如果要修改每次得修改源代码。

解决方案:把数据库的连接信息抽取到一个配置文件(properties/xml)中存储。观察发现存储的信息,是以key-value的形式存在,所以采用properties文件存储。

在scr路径下新建一个bd.properties 文件并存储信息:

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///jdbcdemo    
user=root
password=root;

加载properties文件如下:

package util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import com.mysql.jdbc.Statement;

/***
 * 实现对JDBC 的封装
 * @author mqy
 *
 */
public class JdbcUtil {
    private static    Properties properties = new Properties();
    //使用静态代码块实现 jdbcUtil的字节码被加载锦jvm中 并且只执行一次。避免每次使用都注册
    static{
        try {
            InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
            properties.load(inputStream);
            Class.forName(properties.getProperty("driverClassName"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private JdbcUtil() {
    }
    //提供外界访问 返回数据库的连接对象
    public static Connection getConn(){
        try {
            return DriverManager.getConnection(properties.getProperty("url"), properties.getProperty("user"), properties.getProperty("password"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }    
    //关闭资源  查询方法关闭资源 JdbcUtil.close(conn,st,rs)
    //增删改 关闭资源JdbcUtil.close(conn,st,null)
    public static void close(Connection conn,Statement st,ResultSet rs){
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if (st != null) {
                    st.close();
                }    
            } catch (Exception e2) {
                e2.printStackTrace();
            }finally {
                    try {
                        if (conn != null) {
                        conn.close();
                        }
                        } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
}

 

posted @ 2017-04-18 14:13  Qingyun_Qearl  阅读(315)  评论(0)    收藏  举报