JDBC系列--JDBC工具类

186 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

目的

简化书写

分析

​ 1.注册驱动也抽取

​ 2.抽取一个方法获取连接对象

​ 需求:不想传递参数(麻烦),还带保证工具类的通用新

​ 解决:properties配置文件

url=jdbc:mysql:///db2
user=root
password=root
driver=com.mysql.jdbc.Driver

抽取一个方法释放资源

package cn.caq.utils;

import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;

/**
 * JDBC工具类
 */
public class JDBCutils {
    private static String url;
    private static String user;
    private static String password;
    private static String driver;

    /**
     * 文件的读取,只需要读取一次即可拿到这些值。使用静态代码块
     */
    static {
        try {
            //读取资源文件,获取值
            //1.创建Properties集合类
            Properties pro = new Properties();
            //获取src路径下的文件方式--->ClassLoader 类加载器
            ClassLoader classLoader = JDBCutils.class.getClassLoader();
            URL res = classLoader.getResource("jdbc.properties");//得到文件的绝对路径
            String path = res.getPath();//将绝对路径转化为字符串形式
            //FileReader用来读用户本地的文件
            pro.load(new FileReader(path));

            //2.加载文件
			//pro.load(new FileReader("src/jdbc.properties"));
            //3.获取数据,赋值
            url = pro.getProperty("url");
            user = pro.getProperty("user");
            password = pro.getProperty("password");
            driver = pro.getProperty("driver");
            //4.注册驱动
            Class.forName(driver);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接的方法
     */
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, user, password);
    }

    /**
     * 释放资源的方法
     */

    public static void close(ResultSet rs, Statement stmt, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

使用工具类

package cn.caq.jdbc;

import cn.caq.domain.Emp;
import cn.caq.utils.JDBCutils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class JdbcDemo07 {

    public static void main(String[] args) {
        List<Emp> list = new JdbcDemo07().findall2();
        System.out.println(list);
    }

    /**
     * 演示JDBC工具类
     */
    public List<Emp> findall2() {
        Connection conn = null;
        Statement stmt = null;
        ResultSet res = null;
        ArrayList<Emp> list = null;
        try {
//            //1.注册驱动
//            Class.forName("com.mysql.jdbc.Driver");
//            //2.获取连接对象
//            conn = DriverManager.getConnection("jdbc:mysql:///db2", "root", "root");
            conn = JDBCutils.getConnection();
            //3.定义sql
            String sql = "select * from emp";
            //4.获取执行sql对象
            stmt = conn.createStatement();
            //5.执行sql
            res = stmt.executeQuery(sql);
            //6.处理结果
            Emp emp = null;
            list = new ArrayList<>();

            while (res.next()) {
                int id = res.getInt("id");
                String ename = res.getString("ename");
                int job_id = res.getInt("job_id");

                //创建emp对象,并赋值
                emp = new Emp();
                emp.setId(id);
                emp.setEname(ename);
                emp.setJob_id(job_id);
                //装载集合
                list.add(emp);

            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            JDBCutils.close(res,stmt,conn);
        }
        return list;
    }
}

通过工具类能简化代码的书写,也利用了封装的思想 将重复的代码整个到一个类中,使用的时候直接调用即可不用重复书写