JavaWeb学习笔记-04jdbc工具类

Posted Moon&&Dragon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb学习笔记-04jdbc工具类相关的知识,希望对你有一定的参考价值。

jdbc工具类

1、项目结构


一个web项目结构如下图:

在这里插入图片描述

实体类(简单的类)----com.moon.pojo

数据访问对象(Data access object)-----com.moon.dao

控制器(servlet业务):请求,转发,重定向------com.moon.controller

工具类:MD5加密,邮件处理,短信处理,验证码,数据库访问工具类------com.moon.util数据


项目的流程:

一、modules

  • 1、java文件---->.class文件

  • 2、包含所有的资源文件(css,html,js,图片)

二、加载到artifacts

  • WEB-INF
    • classes:package下面的class文件和一些资源(db.properties)
    • Lib:驱动包(mysql)

三、Tomcat服务器会加载和运行第二步传递过来的文件

2、数据库配置文件


数据库的url地址:

  • 5.5版本:jdbc:mysql://localhost:3306
  • 8.0版本:jdbc:mysql://localhost:3306?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false

创建配置文件:

  • 我一般把数据库配置文件**放在resources目录下**,方便项目读取到配置文件

  • 在resources目录下新建**db-config.properties**

  • propties文件内容如下:

    driverClassName=com.mysql.cj.jdbc.Driver
    user=root
    password=19981104
    url=jdbc:mysql://localhost:3306/cloudMusic?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC
    

    url连接到之前创建好的cloudmusic数据库

3、通过maven添加数据库驱动依赖


在maven的配置文件pom.xml中,添加数据库驱动依赖

<dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>8.0.23</version>
</dependency>

注意:如果maven下载不下来,也**可以手动导入数据库驱动包**

4、书写数据库工具类


书写数据库连接工具类

/**
 * @author 晓龙
 * @version 1.8.271
 * @ProtectName cloudMusic_v1
 * @ClassName JdbcConnection
 * @Description 初始化数据库连接,获得数据库连接对象
 * @createTime 2021年05月03日 12:41:00
 */
public class JdbcConnection {
    /**
     * 数据源配置
     */
    private String driverClassName = null;
    private String user = null;
    private String password = null;
    private String url = null;

    /**
     * 单例模式
     */
    private JdbcConnection() {
    }

    private static volatile JdbcConnection jc = null;

    /**
     * 公开方法:获得数据库连接
     *
     * @return 返回连接对象
     * @throws SQLException
     */
    public synchronized static Connection getConnection() throws SQLException {
        if (jc == null) {
            jc = new JdbcConnection();
        }
        return jc.connection();
    }

    /**
     * 公开方法:关闭数据库
     *
     * @param con   数据库连接对象
     * @param state 数据库操作对象
     * @param res   数据库结果集
     */
    public static void close(Connection con, PreparedStatement state, ResultSet res) {
        try {
            if (con != null) {
                con.close();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            try {
                if (state != null) {
                    state.close();
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            } finally {
                try {
                    if (res != null) {
                        res.close();
                    }
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }

    /**
     * 初始化连接
     *
     * @return
     * @throws SQLException
     */
    private Connection connection() throws SQLException {
        // 初始化数据库驱动
        initJdbcDriver();
        return DriverManager.getConnection(url, user, password);
    }

    /**
     * 初始化数据库驱动
     */
    private void initJdbcDriver() {
        // 获得配置文件
        InputStream config = JdbcConnection.class.getClassLoader()
                            .getResourceAsStream("xFrameConfig.properties");
        // 读取文件
        initJdbcConfig(config, new Properties());
        try {
            // 加载驱动
            Class.forName(driverClassName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 读取配置文件
     *
     * @param config 配置文件
     * @param prop   Properties对象
     */
    private void initJdbcConfig(InputStream config, Properties prop) {
        try {
            // 加载配置文件
            prop.load(config);
            // 读取配置文件并赋值
            driverClassName = prop.getProperty("driverClassName");
            user = prop.getProperty("user");
            password = prop.getProperty("password");
            url = prop.getProperty("url");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

数据库操作工具

/**
 * @author 晓龙
 * @version 1.8.271
 * @ProtectName cloudMusic_v1
 * @ClassName JdbcUtil
 * @Description 数据库工具类,通过JdbcConnection获取连接,
 *              对外只放出结果集对象,
 *              封装数据库连接对象和数据库操作对象
 * @createTime 2021年05月03日 12:53:00
 */
public class JdbcUtil {
    /**
     * 操作对象,SQL和连接对象
     */
    private static String SQL = null;
    private static Connection con = null;
    private static PreparedStatement state = null;

    private JdbcUtil() {
    }

    /**
     * 公开方法:设置sql
     */
    public static void SQL(String sql) {
        SQL = sql;
        // 获得操作对象
        getState();
    }

    private static void getState() {
        try {
            // 获得操作对象
            con = JdbcConnection.getConnection();
            state = con.prepareStatement(SQL);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    /**
     * 公开方法:提交查询,返回结果集
     */
    public static ResultSet query(Object... el) throws SQLException {
        if (state != null) {
            // 遍历传参,进行赋值
            for (int i = 0; i < el.length; i++) {
                state.setObject(i + 1, el[i]);
            }
            // 提交返回结果
            return state.executeQuery();
        }
        return null;
    }

    /**
     * 公开方法:提交修改,返回boolean
     */
    public static boolean update(Object... el) throws SQLException {
        if (state != null) {
            // 遍历传参,进行赋值
            for (int i = 0; i < el.length; i++) {
                state.setObject(i + 1, el[i]);
            }
            // 如果成功,返回true
            if (state.executeUpdate() > 0) {
                return true;
            }
        }
        return false;
    }

    /**
     * 公开方法:关闭连接
     */
    public static void close(ResultSet res) {
        // 只对外部放出了ResultSet,所以内部关闭连接对象和操作对象
        JdbcConnection.close(con, state, res);
    }
}

以上是关于JavaWeb学习笔记-04jdbc工具类的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb07-HTML篇笔记

JAVAWEB学习笔记09_MySQL多表&JDBC(包含MySQL数据库思维导图)

JavaWeb - JDBC各个类详解工具类解决sql注入

JavaWeb - JDBC各个类详解工具类解决sql注入

javaWeb_JDBC_DButils基本使用

Java实战之04JavaWeb-06DBUtils