数据库JDBC操作辅助类

数据库操作辅助类

数据库资源管理器

将数据库驱动字符串、连接字符串、用户名与密码存放在配置文件或是xml文件中,如果以后要更换数据库,则只需要修改配置文件中的信息即可,不用修改Java代码就可以直接使用了。

下面以properties属性文件为配置文件来看:

属性文件

/**
 * 加载配置文件中JDBC连接所需要数据
 */
private static void loadProperties() {
    InputStream in = Thread.currentThread().getClass()
            .getResourceAsStream("/jdbc.properties");
    Properties prop = new Properties();
    try {
        prop.load(in);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    driver = prop.getProperty("driver");
    url = prop.getProperty("url");
    user = prop.getProperty("user");
    password = prop.getProperty("password");
}

在静态代码块中实现数据库驱动加载:

/* 通过静态代码块加载数据库驱动 */
static {
    loadProperties(); // 读取配置文件
    try {
        Class.forName(driver); // 加载驱动
    } catch (ClassNotFoundException e) {
        throw new RuntimeException(e);
    }
}

添加创建连接对象的方法,连接字符串、用户名与密码是上段代码获取到的字符串:

/**
 * 获取连接对象
 * 
 * @return 连接对象
 * @throws SQLException
 *             无法建立连接,则抛出异常
 */
public static Connection getConnection() throws SQLException {
    return DriverManager.getConnection(url, user, password);
}

添加释放各资源的方法:

/**
 * 释放结果集资源
 * 
 * @param rs
 *            结果集对象
 * @throws SQLException
 *             无法释放结果集资源,则抛出异常
 */
public static void close(ResultSet rs) throws SQLException {
    if (null != rs && !rs.isClosed())
        rs.close();
}

/**
 * 释放Statement资源
 * 
 * @param stmt
 *            Statement对象
 * @throws SQLException
 *             无法释放状态集对象资源,则抛出异常
 */
public static void close(Statement stmt) throws SQLException {
    if (null != stmt && !stmt.isClosed())
        stmt.close();
}

/**
 * 释放连接对象资源
 * 
 * @param conn
 *            连接对象
 * @throws SQLException
 *             无法释放连接对象资源,则抛出异常
 */
public static void close(Connection conn) throws SQLException {
    if (null != conn && !conn.isClosed())
        conn.close();
}

数据库会话

自定义一个用于处理会话异常的运行时异常类,即继承RuntimeException类。然后在会话处理中如果抛出异常,则转化为抛出会话异常。

调用会话资源管理器类的方法实现打开会话及释放资源操作:

/**
 * 开启会话
 */
public void open() {
    if (null == conn)
        try {
            conn = JdbcResourceManager.getConnection();
        } catch (SQLException e) {
            throw new JdbcSessionException("数据库会话创建失败", e);
        }
}

/**
 * 关闭数据库会话,释放资源
 */
public void close() {
    try {
        JdbcResourceManager.close(rs);
        rs = null;
    } catch (SQLException e) {
        throw new JdbcSessionException("数据库会话ResultSet关闭失败", e);
    } finally {
        try {
            JdbcResourceManager.close(pstmt);
            pstmt = null;
        } catch (SQLException e) {
            throw new JdbcSessionException("数据库会话Statement关闭失败", e);
        } finally {
            try {
                JdbcResourceManager.close(conn);
                conn = null;
            } catch (SQLException e) {
                throw new JdbcSessionException("数据库会话Connection关闭失败", e);
            }
        }
    }
}

添加用于执行INSERT、UPDATE、DELETE语句的方法:

/**
 * 执行更新SQL语句
 * 
 * @param sql
 *            更新的SQL语句,如INSERT、UPDATE、DELETE语句
 * @param params
 *            用于替换更新语句中"?"占位符的参数列表
 * @return 受影响行数
 */
public int executeUpdate(String sql, Object... params) {
    try {
        pstmt = conn.prepareStatement(sql);
        if (null != params) {
            for (int i = 0; i < params.length; i++) { // 为每个?占位符设置参数
                pstmt.setObject(i + 1, params[i]);
            }
        }
        return pstmt.executeUpdate();
    } catch (SQLException e) {
        throw new JdbcSessionException("执行更新操作失败", e);
    }
}

添加用于执行SELECT语句的方法:

/**
 * 执行查询SQL语句
 * 
 * @param sql
 *            待执行查询的SQL语句,如 SELECT 语句
 * @param params
 *            用于替换查询语句中"?"占位符的参数列表
 * @return 查询结果集ResultSet对象
 */
public ResultSet executeQuery(String sql, Object... params) {
    try {
        pstmt = conn.prepareStatement(sql);
        if (null != params) {
            for (int i = 0; i < params.length; i++) { // 为每个?占位符设置参数
                pstmt.setObject(i + 1, params[i]);
            }
        }
        return rs = pstmt.executeQuery();
    } catch (SQLException e) {
        throw new JdbcSessionException("执行查询操作失败", e);
    }
}

数据库会话工厂

创建线程局部变量用于保存数据库会话对象:

private static final ThreadLocal<JdbcSession> threadLocal = new ThreadLocal<JdbcSession>();

添加静态方法获取数据库会话对象:

/**
 * 获取当前数据库会话对象
 * 
 * @return JDBC数据库会话对象
 */
public static JdbcSession getCurrentSession() {
    JdbcSession session = threadLocal.get(); // 获取线程局部变量中的数据库会话对象
    if (null == session) { // 会话对话不存在,则创建并添加到线程局部变量中保存
        session = new JdbcSession();
        threadLocal.set(session);
    }
    session.open(); // 打开会话
    return session;
}

添加静态方法关闭数据库会话对象,释放资源:

/**
 * 关闭当前数据库会话对象
 */
public static void closeSession() {
    JdbcSession session = threadLocal.get(); // 获取线程局部变量中的数据库会话对象
    threadLocal.set(null); // 置空
    if (null != session) // 会话不为空,则关闭
        session.close();
}

完整代码:http://download.csdn.net/download/zhliro/8663923

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值