JDBC_06封装JDBC工具类

JDBC_06封装JDBC工具类

1.有哪些代码可以封装进工具类

分析如下jdbc程序:

package com.tsccg.jdbc.util;

import java.sql.*;

/**
 * @Author: TSCCG
 * @Date: 2021/07/29 13:00
 * 工具类抽离模板
 */
public class JdbcTest01 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接
            String url = "jdbc:mysql://localhost:3306/tsccg";
            String user = "root";
            String password = "123456";
            conn = DriverManager.getConnection(url,user,password);
            //3.获取预编译数据库操作对象
            String sql = "select ename from emp where ename like ?";
            ps = conn.prepareStatement(sql);
            //给占位符赋值
            ps.setString(1,"__A%");
            //4.执行sql语句
            rs = ps.executeQuery();
            //5.处理查询结果集
            while (rs.next()) {
                System.out.println(rs.getString("ename"));
            }
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
}

纵观整个程序,我们可以发现第3、5步的代码是不固定的,而第4步的代码只有一行,即使封装进工具类中,使用时也要用一行代码调用。

所以,我们可以将1、2、6这三步比较固定且冗余的代码封装进工具类中。

2.实现工具类

package com.tsccg.jdbc.util;

import java.sql.*;

/**
 * @Author: TSCCG
 * @Date: 2021/07/29 12:57
 * jdbc工具类
 */
public class JdbcUtil {
    /**
     * 工具类中的方法都是静态的,不需要new对象,直接用类名调用
     * 所以可将构造方法设为私有的,这是模仿在源码里的工具类中构造方法的写法
     */
    private JdbcUtil() {
    }
    //1.注册驱动
    //注册驱动只需要执行一次,可放进静态代码块中。
    //只要一调用工具类,就会调用工具类的构造方法,随之就会加载静态代码块中的内容
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 2.获取连接对象
     * @return 数据库连接对象
     * @throws SQLException 上抛SQL异常
     */
    public static Connection connect() throws SQLException {
        String url = "jdbc:mysql://localhost:3306/tsccg";
        String user = "root";
        String password = "123456";
        return DriverManager.getConnection(url,user,password);
    }

    /**
     * 6.关闭资源
     * @param rs 查询结果集
     * @param stmt 可操作数据库对象
     * @param conn 连接对象
     */
    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

3.测试工具类

先使用工具类改造前面的程序

package com.tsccg.jdbc.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @Author: TSCCG
 * @Date: 2021/07/29 13:19
 * 实现模糊查询
 * 使用jdbc工具类
 */
public class JdbcLikeDemo01 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            //1.注册、2.获取连接
            conn = JdbcUtil.connect();
            //3.获取预编译的数据库操作对象
            String sql = "select ename from emp where ename like ?";
            ps = conn.prepareStatement(sql);
            //查询第三个字母为A的员工名字
            ps.setString(1,"__A%");
            //4.执行sql语句
            rs = ps.executeQuery();
            //5.处理查询结果集
            while (rs.next()) {
                System.out.println(rs.getString("ename"));
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            //6.关闭资源
            JdbcUtil.close(conn,ps,rs);
        }
    }
}

结果:

BLAKE
CLARK
ADAMS
上一篇:jdbc访问数据库-修改


下一篇:史上最全的 DB2 错误代码大全