JDBC代码封装

目录

1.前请概要

2.封装思路

3.材料准备

4.代码实现

1.配置文件db.properties

2.编写JDBC工具类

3.补充说明


1.前请概要

上篇文章中讲了如何通过调用JDBC来实现对数据库的增删改查,包括加载驱动、连接、创建语句对象、建立结果集以及释放资源五大流程。同样地,当考虑到某些代码需要在多个类中使用时,我们就应该要避免重复造轮子,所以我们就用到Java的其中一大特性:封装,将上述五大流程都归于一个工具类下,并且可供其它类随时调用。

2.封装思路

这里我个人总结了一个口诀:CSRC(或CPRC

其中第一个C是Connection、S是statement(或PreStatement)、R是ResultSet、最后一个C是Close。

也就是说,至少我们要写4个方法,分别获取出4个材料,前一个方法的“产品”(返回值)又恰好被用于后一个方法的“原材料”(参数)

方法自然可设置为:getConnection()、getStatement(Connection con)、getResultSet(Statement statement)、close(Connection con,Statement statement,ResultSet resultSet)  现在你可以看一会  找出它们的前后关系

注意:getStatement那里也可以是getPreStatement,让后面的方法中涉及到的都变成PreStatement即可

3.材料准备

上文中我们提到,调用JDBC需要准备一些基本材料:url(要连接的数据库路径资源)、driver(所用驱动)、username(连接数据库的用户名)、password(连接数据库的密码)

之前我们是直接定义4个变量,将对应内容赋予。而现在我们也可以用配置文件:db.properties文件,通过Java反射机制Properties类从该配置文件中读取数据库连接信息。

4.代码实现

1.配置文件db.properties

url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
#url中的test是我的数据库名,注意改成你自己的

driver=com.mysql.jdbc.Driver  #这里我用的是Mysql5.7的驱动
username=【数据库用户名】
password=【数据库密码】

2.编写JDBC工具类

public class JdbcUtil{

    private static String url;

    private static String username;

    private static String password;

    private static String driver;


        static {
            //通过类加载器读取对应资源

            InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");

            Properties properties = new Properties();

            try {
                properties.load(is);
                //将流加入到properties对象中
            } catch (IOException e) {
                throw new RuntimeException(e);
            }

            url = properties.getProperty("url");

            username = properties.getProperty("username");

            password = properties.getProperty("password");

            driver = properties.getProperty("driver");

        }

        public static Connection getConnection() throws SQLException, ClassNotFoundException {
            // 加载驱动程序
            Class.forName(driver);

            Connection connection = DriverManager.getConnection(url, username, password);

            return connection;

        }

        public static Statement getStatement(Connection connection) throws SQLException {

            Statement statement = connection.createStatement();

            return statement;

        }
        // 这里也可以是改为PreStatement,用预编译

        public static PreparedStatement getPreparedStatement(Connection connection,String sql) throws SQLException {
            
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            
            return preparedStatement;
            
        }



        public static ResultSet getResultSet(Statement statement,String sql) throws SQLException {

            statement.execute(sql);

            ResultSet resultSet = statement.getResultSet();

            return  resultSet;
        }


        public static void close(Connection connection,Statement statement,ResultSet resultSet) throws SQLException {
            if(resultSet!=null){

                resultSet.close();
                //GC回收

                resultSet = null;

            }

            if(statement!=null){


                statement.close();
                //GC回收

                statement = null;
            }

            if(connection!=null){

                connection.close();
                //GC回收

                connection = null;

            }


        }

3.补充说明

static{}是静态代码块,和静态变量之间的初始化顺序遵循从上到下的顺序。在这段代码中,静态代码块的初始化顺序在静态变量之前,因此它可以保证在静态变量被使用之前先进行初始化

总之,static关键字的作用是将方法或变量声明为静态,可以在不创建对象的情况下直接访问静态成员,以及在类被加载时执行一些需要初始化的操作,例如在此代码中所体现的初始化数据库连接信息。

你可能感兴趣的:(数据库,java,mysql)