封装JDBC工具类,连接MySQL数据库

JDBC是由java编程语言编写的类及接口组成,同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API,并支持SQL语言。利用JDBC可以将JAVA代码连接到oracle、DB2、SQLServer、MYSQL等数据库,从而实现对数据库中的数据操作的目的。

JDBC简介

JDBC全称为:Java Data Base Connectivity (java数据库连接),可以为多种数据库提供填统一的访问。JDBC是sun开发的一套数据库访问编程接口,是一种SQL级的API。它是由java语言编写完成,所以具有很好的跨平台特性,使用JDBC编写的数据库应用程序可以在任何支持java的平台上运行,而不必在不同的平台上编写不同的应用程序。

JDBC主要功能

  1. 建立与数据库或者其他数据源的链接;
  2. 向数据库发送SQL命令;
  3. 处理数据库的返回结果;

JDBC中常用类和接口

连接到数据库(Connection)、建立操作指令(Statement)、执行查询指令(executeQuery)、获得查询结果(ResultSet)等。

JDBC编程步骤

(1)加载驱动程序:Class.forName(driverClass)

// 加载mysql驱动
Class.forName("com.mysql.jdbc.Driver");
// 加载oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver");

(2)获得数据库连接:DriverManager.gerConnection(URL,user,password);

DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc",user,password)
DriverManager.gerConnection(URL,user,password);

(3)创建Statement对象:conn.createStatement()

 Statement st=conn.createStatement();

(4)向数据库发送SQL命令:st.executeQuery();

  ResultSet rs=st.executeQuery("select * from user");

(5)处理数据库的返回结果(ResultSet类)

while(rs.next()){
  System.out.println(rs.getString("user_name")+" "+rs.getString("user_password"));
}

(6)关闭资源

rs.close();
st.close();
conn.close();

每次Java程序操作数据库时,都要按上面将的步骤一步步地来。显然这样在实际应用中是不合理的,所以就诞生了数据库连接池。在这里先不使用数据库连接池。先自己封装一个数据库操作工具类,就是把在数据库连接操作中公用且固定不变的代码提炼出来。

封装JDBC工具类

在Java程序操作数据库中,公用代码中固定不变有:加载驱动程序、获取数据库连接、关闭资源。所以只要把这三个步骤中的代码提炼出来【封装到方法中,并暴露出方法】即可。

1、封装加载驱动程序

/**
* 加载驱动程序是直接调用CLass类的forName()方法,且必须在第一时间运行。封装的JDBC操作工具类一般不需要通过实例化去操作,所以可以根据Java类加载机制,把【加载驱动程序】这一操作封装到静态代码块中。
*/
static {
  Class.forName();
}
/**
* 上面的代码还有些小瑕疵,就是在进行加载驱动程序时,可能会发生加不到驱动程序的情况发生,这样就会导致程序代码发生错误。可以根据Java异常处理机制,捕获一下异常。
*/
static {
 try {
   Class.forName();
 } catch(ClassNotFoundException e){
   e.printStackTrace();
 }
}

2、封装获取数据库连接

通过封装第一步,就已经知道,在使用这个工具类时,是不需要进行实例化操作的,必须把使用权交给这个工具类本身。所以封装的方法(代码)必须是静态的。【获取数据库连接】这一步骤,是会返回一个数据库连接对象,所以比较适合封装到一个方法中。

public static Connection getConnection() {
  Connection conn = null;
  String url = "jdbc:mysql://127.0.0.1:3306/dbtest?useUnicode=true&characterEncoding=utf8";
  String user = "root";
  String password = "rootPassword";
  conn = DriverManager.getConnection(url, user, password);
  System.out.println("connection is successful!");
  return conn;
}

然后再处理一下异常

public static Connection getConnection() {
  Connection conn = null;
  String url = "jdbc:mysql://127.0.0.1:3306/dbtest?useUnicode=true&characterEncoding=utf8";
  String user = "root";
  String password = "rootPassword";
  try {
     conn = DriverManager.getConnection(url, user, password);
     System.out.println("connection is successful!");
  } catch (SQLException e) {
     System.out.println("connection error!");
     e.printStackTrace();
  }
  return conn;
}

3、封装关闭资源

这一步骤是通过三个对象的调用各自的close()方法来关闭连接,释放资源的。所以适合封装到一个带参的方法中。

//释放JDBC资源(关闭顺序与声明时的顺序相反)
public static void release(Connection conn, Statement state, ResultSet rs) {
  rs.close();
  state.close();
  conn.close();
 }

加上条件限制及异常处理

//释放JDBC资源(关闭顺序与声明时的顺序相反)
public static void release(Connection conn, Statement state, ResultSet rs) {
  if (rs != null) {
    try {
      rs.close();
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }
  if (state != null) {
    try {
       state.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
  }
  if (conn != null) {
    try {
      conn.close();
     } catch (SQLException e) {
      e.printStackTrace();
     }
   }
 }

到此,这个JDBC数据库工具类就封装好了。整合一下,完整代码如下。

package util;
import java.sql.*;
public class JDBCUtil {
    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    //获得连接
    public static Connection getConnection() {
        Connection conn = null;
        String url = "jdbc:mysql://150.158.152.250:3306/demo_com_47aa3?useUnicode=true&characterEncoding=utf8";
        String user = "demo_com_47aa3";
        String password = "zero#ZFTS5080";
        try {
            conn = DriverManager.getConnection(url, user, password);
            System.out.println("connection is successful!");
        } catch (SQLException e) {
            System.out.println("connection error!");
            e.printStackTrace();
        }
        return conn;
    }
    //释放JDBC资源(关闭顺序与声明时的顺序相反)
    public static void release(Connection conn, Statement state, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (state != null) {
            try {
                state.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/jdbc-util-class.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
上一篇 2021年5月28日
下一篇 2022年4月2日

相关推荐

  • servlet学习之获取表单数据(IDEA2020.2篇)

    首先,创建一个servlet工程。 如果你不会用IDEA2020.2创建servlet工程,请打开下面链接浏览网站博文。 https://www.edu24.cn/course/j…

    2020年9月8日
    1.4K
  • MyBatis配置之枚举类型typeHandler讲解(上)

    之前发布了一篇《MyBatis配置之typeHandler类型处理器》的文章,讲解了在使用MyBatis时如何自定义typeHandler。但是在MyBatis中枚举类型的type…

    2022年4月21日
    857
  • 网页布局之三栏网页宽度自适应布局

    在工作中经常遇到网页布局错乱的问题,往往引发的这种问题都是因为不同设备不同分辨率而导致。归根结底,是因为前端工程师经验不足,代码写得不够完好。以下是我总结及从网络搜集的一些网页布局…

    2018年10月8日
    2.9K
  • CSS让内容居中的方法总结

    内容水平居中  分行内元素与块级元素两种情况;其中块级元素又分定宽与不定宽两种情况; 行内元素 首先看它的父元素是不是块级元素,如果是,则直接给父元素设置 te…

    2019年6月28日
    3.3K
  • STS插件mybatis-generator安装及使用

    断断续续学习Java也有好长时间了,没有师傅带,没有项目练手,学习超级慢,也很烦。视频、书籍翻看了一大推,还是没有目标。 相信滴水成海,外加条条大路通罗马,只要坚持,自己终能达成目…

    2019年12月27日
    2.2K
  • spring boot练习篇之用户登录系统【接入数据库】

    抛弃JSP,只做纯粹的前后端分离项目。 写在前面 学习基础知识是枯燥无味的,之所以会这样,多数是因为心不静,对于如何运用它,感到茫然。所以建议大家在学习Java基础知识的时候,一定…

    2021年5月28日
    1.2K
  • 如何封装JDBC工具类读取properties配置文件连接数据库

    思路 之前已经写过一片《封装JDBC工具类,连接MySQL数据库》,讲解了如何封装JDBC工具类。但是在实际的应用中往往是把数据库连接的相关信息写在一个配置文件中,让程序自己去读取…

    2022年4月2日
    830
  • Webpack入门,资源处理流程

    在前几篇的文章中,梳理了Webpack的模块打包功能。可以把Webpack打包模块理解成类似于工厂中的产品组装,也就是把一个个零部件拼起来得到最终的成品。接下来的几篇,则主要要关注…

    2022年11月18日
    567
  • MyBatis配置之properties属性详解

    之前写了一篇《如何搭建MyBatis开发环境》,通过一个简单的实例讲解了关于搭建MyBatis的开发环境,这篇将详细讲解MyBatis的配置。 MyBatis配置文件的层次结构 这…

    2022年4月18日
    734
  • 函数防抖与函数节流

    函数防抖 定义 触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间;更直白一点就是:一个需要频繁触发的函数,在规定时间内,只让最后一次生效,…

    2020年7月17日
    1.4K