目的:简化书写
分析:
    驱动注册,连接对象创建,其中包括输入驱动,数据库的地址,以及用户名和密码,每次编写代码都需要重复编写,如果每次使用的都是同一个账户的同一个数据库,代码的重复读很高,甚至如果sql语句相同,或者都是查询语句时,会创建的statement对象,而对象的销毁程序也是一模一样。面对这样高度重复的代码,我们需要对其进行封装。像数据库信息这种可能会变更的信息,我们可以写一个数据库的配置文件,当用户的数据库信息不变时,直接使用其中的信息即可,如果有变更,直接更改配置文件,再进行数据读写。
 
实现:
package demo02.homework;

import java.io.FileReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLDecoder;
import java.sql.*;
import java.util.Properties; public class JdbcUtils {
private static String url = null;
private static String user = null;
private static String password = null;
private static String driver = null; // 使用静态方法,保持全局调用
static {
// 获取包所在文件夹的数据库配置文件
ClassLoader classLoader = JdbcUtils.class.getClassLoader();
// getResource内的数据库配置文件路径最好写绝对路径
URL resource = classLoader.getResource("demo02/homework/jdbc.properties");
String path = resource.getPath();
try {
// 如果数据库配置文件路径有中文,会显示乱码,需要进行解码
path = URLDecoder.decode(path, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 创建获取配置信息对象
Properties prop = new Properties();
try {
// 加载数据库配置文件
prop.load(new FileReader(path));
} catch (IOException e) {
e.printStackTrace();
}
// 获取数据库配置文件对应的信息
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
driver = prop.getProperty("driver");
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} // 创建连接对象
public static Connection getConnection() {
try {
return DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
} // 关闭对象方法,这里进行了重载,接收不同的对象
public static void close(Connection conn, Statement stat){
if(stat!=null){
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} public static void close(Connection conn, Statement stat, ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stat!=null){
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

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

  1. 抽取JDBC工具类并增删改查

    抽取工具类: package demo; /* * 工具类 */ import java.sql.Connection; import java.sql.DriverManager; import j ...

  2. 抽取JDBC工具类

    package com.wbytts.util; import java.io.IOException; import java.io.InputStream; import java.sql.Con ...

  3. 开源JDBC工具类DbUtils

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

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

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

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

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

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

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

  7. MySQL JDBC事务处理、封装JDBC工具类

    MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...

  8. JDBC第三篇--【事务、元数据、改造JDBC工具类】

    这是我JDBC的第一篇 http://blog.csdn.net/hon_3y/article/details/53535798 这是我JDBC的第二篇 http://blog.csdn.net/ho ...

  9. JDBC【事务、元数据、改造JDBC工具类】

    1.事务 一个SESSION所进行的所有更新操作要么一起成功,要么一起失败 举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样[A账户的钱没变,B账户的钱也没变]. 事例说 ...

  10. JDBC 工具类模板c3p0

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

随机推荐

  1. spring cloud alibaba sentinel 运行及简单使用

    1.官网 英文:https://github.com/alibaba/Sentinel 中文:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7 ...

  2. 快速上手Java开发工具Eclipse之简易手册

    Eclipse下载,可以下载最新版本,文档是以2020-12R版本为例 http://www.eclipse.org/downloads/ 下载Packages即可 安装Eclipse 解压安装 除了 ...

  3. STM32F0库函数初始化系列:ADC

    static void ADC_Config(void) { ADC_InitTypeDef ADC_InitStructure; /* ADCs DeInit */ //ADC_DeInit(ADC ...

  4. Dao包 对数据库的操作

    //添加 public static int add(Bean1 bean){ String sql = "insert into classtable(classname,teacher, ...

  5. 你想知道的do{...}while(0)的作用,都在这里了

    0.引言         我们在嵌入式开发的过程中,经常可以碰到在一些宏定义或者是代码段中使用了do {...} while(0)的语句,从语义上理解,do {...} while(0)内的逻辑就只执 ...

  6. CTF之WEB学习路线规划

    前言 受大佬Lzer0Kx(公众号:LK安全)启发,打算整一篇关于CTF-web的学习路线的分享.当然也算是给一些刚入门的小白的一些学习方向,不至于不知道学啥.废话少说,开整! 以下的所有内容属于我个 ...

  7. Art of Illusion 一款**的开源 3D 建模和渲染软件

    原文地址:https://www.mvrlink.com/artofillusion/ Art of Illusion 是一个免费的开源 3D 建模和渲染工作室.它的许多功能可与商业程序中的功能相媲美 ...

  8. 跟着廖雪峰学python 006

    ​ 递归函数 在函数内部调用自身本身 计算阶乘: def fact(n): if n == 1: return 1 return n * fact(n - 1) 注意:使用递归函数需要防止栈溢出. 在 ...

  9. 【PyQt5学习-02-】PyQt5 库的结构

    1.pyqt5模块 pyqt5模块(module)文档 https://www.riverbankcomputing.com/static/Docs/PyQt5/module_index.html q ...

  10. js获取input处理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...