package util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;

/**
* 较为繁琐并且存在【通用性代码】
* 1. 数据库连接的过程
* 驱动加载,必要参数和获取数据库连接
* 2. 数据库操作使用的资源关闭问题
* <p>
* JDBCUtil这个工具类能够给我们提供什么便利
* 1. 自动加载驱动,预处理所有的必要参数
* 2. 简化获取数据库连接的方法,改为getConnection();
* 3. 简化关闭数据库连接使用的资源,改为统一的close方法
* 4. 所有的方法都是通过类名直接调用,摆脱类对象约束,使用static修饰的静态成员方法
*
* @author Anonymous
*/
public class JdbcUtil {

// 数据库连接所需的必要条件
private static String url = null;
private static String user = null;
private static String password = null;

// 使用静态代码块完成自动加载,辅助程序运行的必要参数
static {
try {
// 1. 准备当前db.properties输入字节流对象
FileInputStream fis = new FileInputStream(new File("./src/db.properties"));

// 2. 获取一个Properties类对象
Properties properties = new Properties();

// 3. 使用load方法,获取db.properties文件内容到Properties类对象
properties.load(fis);

// 4. 通过Properties类对象,获取对应的属性
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("password");

Class.forName(properties.getProperty("driverClass"));
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}

/**
* 静态成员方法,获取对应数据库的java.sql.Connection连接对象
*
* @return java.sql.Connection 数据库连接对象,如果发生意外返回null
*/
public static Connection getConnection() {
Connection connection = null;

try {
connection = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}

return connection;
}

/**
* 关闭数据库Connection连接对象
*
* @param connection java.sql.Connection 数据库连接对象
*/
public static void close(Connection connection) {
close(connection, null, null);
}

/**
* 关闭数据库Connection连接对象,以及Statement数据库SQL语句搬运工对象
*
* @param connection java.sql.Connection 数据库连接对象
* @param statement java.sql.Statement 数据库SQL语句搬运工对象
*/
public static void close(Connection connection, Statement statement) {
close(connection, statement, null);
}

/**
* 关闭数据库Connection连接对象,Statement数据库SQL语句搬运工对象以及查询结果集对象ResultSet
*
* @param connection java.sql.Connection 数据库连接对象
* @param statement java.sql.Statement 数据库SQL语句搬运工对象
* @param resultSet java.sql.ResultSet 查询结果集类对象
*/
public static void close(Connection connection, Statement statement, ResultSet resultSet) {
try {

if (resultSet != null) {
resultSet.close();
}

if (statement != null) {
statement.close();
}

if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

简单实现JDBC自动加载驱动,简化数据连接和关闭数据库连接的更多相关文章

  1. JavaEE JDBC 怎么加载驱动

    JDBC怎么加载驱动 @author ixenos 分析 1.JDBC是一套连接数据库的接口(放在java.util.sql.Driver类中),不同的数据库依此接口各自实现Java连接到数据库的操作 ...

  2. Inside GDALAllRegister之二: 自动加载驱动

    代码    GetGDALDriverManager()->AutoLoadDrivers(); 包含了两部分: 首先获得GDALDriverManager的singleton对象的指针,这点之 ...

  3. JS简单实现滚动自动加载新内容(懒加载)

    加载源 // 这里存后台发来的数据 var galleryList = [ { src: "./images/1.jpeg", desc: "11111" }, ...

  4. PHP自动加载下——PSR4

    1.先来介绍一下PSR规范 PHP-FIG,它的网站是:www.php-fig.org.就是这个联盟组织发明和创造了PSR规范,其中自动加载涉及其中两个规范,一个是PSR0,一个是PSR4, PSR0 ...

  5. java连接数据库加载驱动到java项目

    java连接数据库 package com.cook.zheng; import java.sql.Connection; import java.sql.DriverManager; public ...

  6. JDBC:加载数据库驱动、连接数据库(详细讲解)

    加载数据库驱动: 1)由于Java是一个纯面向对象语言,任何事物在其中都必须抽象成类或者类对象,数据库也不例外,JDBC同样也把数据库抽象成面向对象的结构: 2)JDBC将整个数据库驱动器在底层抽象成 ...

  7. java基础-jdbc——三种方式加载驱动建立连接

    String url = "jdbc:mysql://localhost:3306/student?Unicode=true&characterEncoding=utf-8" ...

  8. JDBC详解系列(二)之加载驱动

    ---[来自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)---   在JDBC详解系列(一)之流程中 ...

  9. JDBC加载驱动的方法+statement

    加载驱动方法 1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 2. DriverManager.r ...

随机推荐

  1. Zookeeper原理 二

    Zookeeper到底是什么!? 学一个东西,不搞明白他是什么东西,哪还有心情学啊!! 首先,Zookeeper是Apache的一个java项目,属于Hadoop系统,扮演管理员的角色. 然后看到官网 ...

  2. Python基础之range()

    range:指定范围,生成指定数字. 1. range() for i in range(1, 10): print(i) 执行结果为: 1 2 3 4 5 6 7 8 9 2. range()步长 ...

  3. 8.8 JQuery框架

    8.8 JQuery框架 一.JQuery是一个javascript的框架,是对javascript的一种封装. 通过JQuery可以非常方便的操作html的元素\要使用Jquery需要导入一个第三方 ...

  4. 发布jar项目到maven仓库

    在要发布的项目pom文件中添加配置: <distributionManagement> <repository> <id>releases</id> & ...

  5. selenium知识点

    1. 导包 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from se ...

  6. 数据结构之队列(Queue)

    1,队列的定义 队列:是一种先进先出的数据结构,如下图所示,现进去的数据在队列前面(front),先出队列,后进入队列的数据在后面(rear),后出队列. 队列常用操作: q=Queue() #创建队 ...

  7. POJ 1837 -- Balance(DP)

     POJ 1837 -- Balance 转载:優YoU   http://user.qzone.qq.com/289065406/blog/1299341345 提示:动态规划,01背包 初看此题第 ...

  8. MySQL Cluster 集群部署

    前言 此篇博客用以介绍 MySQL Cluster 集群部署方法 一.节点规划 序号 IP地址 节点名称 1 172.16.1.201 mysql-manage 2 172.16.1.202 mysq ...

  9. 图解Python 【第八篇】:网络编程-进程、线程和协程

    本节内容一览图: 本章内容: 同步和异步 线程(线程锁.threading.Event.queue 队列.生产者消费者模型.自定义线程池) 进程(数据共享.进程池) 协程 一.同步和异步 你叫我去吃饭 ...

  10. 微服务中的CAP定律

    说到微服务,先给大家提一下CAP分布式应用知识吧,无论你微服务使用的是阿里云开源的Dubbo还是基于Springboot的一整套实现微服务的Springcloud都必须遵循CAP定理不然你所实现的分布 ...