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. Linux操作大全

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  2. 年视图,选择月份 ---bootstrap datepicker

    $.fn.datepicker.dates['cn'] = { //切换为中文显示 days: ["周日", "周一", "周二", &qu ...

  3. JWT加密解密

    如何保证WebAPI的安全?1.JWT加密解密.token2.使用https传输协议.3.把用户所有请求的参数信息加上一个只有服务器端知道的secret,做个散列运算,然后到了服务器端,服务器端也做一 ...

  4. [log4j]Error:The method getLogger(String) in the type Logger is not applicable for the arguments

    原因:本该导入import org.apache.log4j.Logger; 结果成了import java.util.logging.Logger; 如果硬把private static Logge ...

  5. 异常值检验实战1--风控贷款年龄变量(附python代码)

    python风控评分卡建模和风控常识(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005214003&am ...

  6. python git 基础操作

    模块安装 pip install gitpython 基本用法 1. 初始化 from git import Repo Repo.init('/data/test2') # 创建一个git文件夹 # ...

  7. LC 835. Image Overlap

    Two images A and B are given, represented as binary, square matrices of the same size.  (A binary ma ...

  8. 发布机制-灰度发布-例子:Windows

    ylbtech-发布机制-灰度发布-例子:Windows 在传统软件产品发布过程中(例如微软的Windows 7的发布过程中),一般都会经历Pre-Alpha.Alpha.Beta.Release c ...

  9. PCL中有哪些可用的PointT类型(2)

    博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=267 PointXY-float x, y; 简单的二维x-y point结 ...

  10. echarts.js导致angular-translate加载模块失败

    echarts.js导致angular-translate加载模块失败,待解决