1. 目的

  每次使用JDBC的时候都要书写冗长的代码段,不符合复用的理念,于是要单独写一个类,将通用的JDBC操作写到一个类中,便于重复使用和精简代码。

2. 步骤

  (1)注册驱动并获取连接

    为了最大精简获取连接的简化性和通用性,这里需要使用到配置文件 jdbc.properties 解决。

    1) 创建一个文件,放到项目中,要更换别的连接时,只需修改配置文件即可,无需修改类文件和重新编译。

    driver=数据库驱动路径
    url=url连接字符串
    user=用户名
    password=密码

    2) 然后就需要将配置文件中键值对中的值取出,并注册了驱动。因为驱动和取出配置文件只需要一次就可以,所以就写入到静态代码块中,在程序运行的开始就处理好了,无需以后再冗余执行。

// 定义静态变量,使用静态代码获取配置文件的值
private static String url;
private static String user;
private static String password;
private static String driver;
// 使用静态代码注册驱动并给静态变量赋值
static{
try {
// 创建Properties集合类
Properties pro = new Properties();
// 获取src路径下文件,使用ClassLoader类加载器
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
// URL定位了文件的绝对路径
URL res = classLoader.getResource("jdbc.properties");
// 获取字符串路径
String path = res.getPath();
// 读取文件
pro.load(new FileReader(path));
// 给静态变量赋值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
// 注册驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

    3) 获取连接

public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}

  (2)释放资源

    因为有的sql语句需要用结果集对象,所以使用两个重载方法释放资源。

/**
* @Author ZhaoPeiXuan
* @Description 释放资源
* @Date 22:08 2019/9/16
* @Param [stmt 执行sql的对象, conn 数据库连接对象]
* @return void
**/
public static void close(Statement stmt, Connection conn){
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} /**
* @Author ZhaoPeiXuan
* @Description 释放资源Pro版
* @Date 22:13 2019/9/16
* @Param [rs 结果集对象, stmt 执行sql的对象, conn 数据库连接对象]
* @return void
**/
public static void close(ResultSet rs, Statement stmt, Connection conn){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

3. 简化后的代码

  Connection conn = null;
  Statement stmt = null;
  ResultSet rs = null;
  try {
    conn = JDBCUtils.getConnection();
    String sql = "SQL语句";
    stmt = conn.createStatement();
    rs = stmt.executeQuery(sql);
  } catch (SQLException e) {
    e.printStackTrace();
  } finally {
    JDBCUtils.close(rs, stmt, conn);
  }

JDBC工具类:JDBCUtils的更多相关文章

  1. 开源JDBC工具类DbUtils

    本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUti ...

  2. JDBC 工具类模板c3p0

    JDBC 工具类模板 package com.itheima.sh.utils; import com.mchange.v2.c3p0.ComboPooledDataSource; import ja ...

  3. JDBC工具类连接数据库,模仿登录

    ## 使用JDBC工具类的原因在使用JDBC连接数据库的时候,加载驱动.获取连接.释放资源等代码是重复的,所有为了提高代码的复用性,我们可以写一个工具类,将数据库驱动加载.获取连接.资源释放的代码封装 ...

  4. JDBC-select练习&jdbc工具类&数据库登录案例

    一.select练习 1.说明 练习: * 定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回. 1. 定义Emp类 2. 定义方法 public List<Emp> fi ...

  5. MySQL_(Java)提取工具类JDBCUtils

    MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC创建用户名和密码校验查询方法 传送门 MySQL_(Java)使用preparestatement ...

  6. 利用JDBC工具类添加和查询数据-Java(新手)

    JDBC工具类: 1 package cn.lxr.jdbclx; 2 3 import java.sql.*; 4 5 public class JDBCUtils { 6 private stat ...

  7. JDBC工具类—如何封装JDBC

    “获得数据库连接”操作,将在以后的增删改查所有功能中都存在,可以封装工具类JDBCUtils.提供获取连接对象的方法,从而达到代码的重复利用. 该工具类提供方法:public static Conne ...

  8. JDBC基础:JDBC快速入门,JDBC工具类,SQL注入攻击,JDBC管理事务

    JDBC基础 重难点梳理 一.JDBC快速入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以 ...

  9. MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  10. MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

随机推荐

  1. 【前端适配】vw单位移动端适配方案

    近些年移动端的强势崛起,导致移动端适配越来越重要,个人之前一直使用的是rem进行适配,但是发现并不是非常完美,给力的是大漠老师写了一篇<如何在Vue项目中使用vw实现移动端适配>,比较完美 ...

  2. springboot系列(八)springboot整合mybatis

    本篇介绍一下在springboot中整合mybatis ,使用mysql数据库,集成durid 连接池技术,全部代码是手动生成,没有使用代码生成器来构建代码. 一.创建数据库和表 二.在pom中添加依 ...

  3. 基于fastai的分类网络

    classify.fastai Classifier based on fastai 欢迎访问:https://github.com/pprp/classify.fastai/ 字符识别分类器-基于f ...

  4. MySQL分布式数据库架构:分库、分表、排序、分页、分组、实现教程

    MySQL分库分表总结: 单库单表 : 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 单库多表 : 随着用户数量的增加, ...

  5. ZZNU - OJ - 2080 : A+B or A-B【暴力枚举】

    2080 : A+B or A-B(点击左侧标题进入zznu原题页面) 时间限制:1 Sec 内存限制:0 MiB提交:8 答案正确:3 提交 状态 讨论区 题目描述 Give you three s ...

  6. de4dot - Deobfuscator for .NET

    Features Here's a pseudo random list of the things it will do depending on what obfuscator was used ...

  7. Idea中用来遍历list集合的快捷键

    使用Intellij idea时,想要快捷生成for循环代码块: itar 生成array for代码块 for (int i = 0; i < array.length; i++) { = a ...

  8. appium 使用name 定位报错 Locator Strategy 'name' is not supported for this session

    RF中使用 name定位 报错提示: Locator Strategy 'name' is not supported for this session 解决: 1. 打开本地文件 driver.js ...

  9. 云计算(5)---MapReduce

    什么是MapReduce 例如用MapReduce如何计算12+22+32+42 用MapReduce执行Wordcount 步骤1:Map map task1 和map task2是独立,并行进行 ...

  10. java中为什么不能通过getClass().getName()获取父类的类名

    例如: class A{} public class B extends A{ public void test(){ System.out.println(super.getClass().getN ...