栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JDBC——抽取JDBC工具类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDBC——抽取JDBC工具类

目录

1、抽取获取数据库连接对象的代码 

2、抽取注册驱动代码

3、抽取关闭资源的方法

4、测试

5、抽取配置文件

6、完整工具类代码

前文提到使用jdbc操作数据库进行增删改查的代码重复度比较高,将重复的代码抽取成一个工具类进行代码的复用,简化代码编写

首先观察哪些代码的重复性比较高:

接下来编写Jdbcutil工具类

1、抽取获取数据库连接对象的代码 

首先我们想要通过工具类获取到封装了数据库连接信息的数据库连接对象connection

所以需要在JdbcUtil中编写一个方法 返回的是connection

 将数据库连接信息通过参数传递进来:

2、抽取注册驱动代码

 注册驱动是都需要的,首先想到使用static静态代码块 随着类加载就加载静态代码块 即注册驱动

所以当我们使用jdbcUtil类的时候加载JdbcUtil类的时候就会注册驱动

3、抽取关闭资源的方法

通过方法得到重载编写关闭资源的方法 传递的参数不同 调用的方法不同 

    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();
            }
        }
    }
    public static void close(PreparedStatement pstmt, Connection conn) {
        if (pstmt != null) {
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

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


    
    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();
            }
        }
    }
    public static void close(ResultSet rs, PreparedStatement 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();
            }
        }
    }

4、测试

查询

// jdbc工具类测试
public class JdbcUtilTest {
    public static void main(String[] args) {
        ResultSet resultSet = null;
        Connection connection = null;
        Statement statement = null;

        try {
            // 1、注册驱动 获取数据库连接对象
            connection = JdbcUtil.getConnection();
            // 2、打印connection对象 看看能否获取到数据库连接对象
//            System.out.println(connection);

            // 定义sql
            String sql = "select * from person";
            // 获取执行sql的对象
            statement = connection.createStatement();
            // 执行sql进行查询
            resultSet = statement.executeQuery(sql);
            // 处理查询结果
            while (resultSet.next()) {
                System.out.println(resultSet.getString("name") + "---" + resultSet.getString("email"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 释放资源 调用工具类的close方法
            JdbcUtil.close(resultSet,statement,connection);
        }

    }
}


但是我们发现数据库连接信息 比如driver url用户密码等信息还是和java代码耦合死的,

当以后我们需要修改数据库信息,比如连接另外一个数据库的时候就需要找到该java代码进行修改 ,非常不是我们想要的。

所以我们需要将数据库连接信息单独抽取出来 形成一个配置文件

继续完善工具类代码

5、抽取配置文件

在src下新建一个properties文件 将数据库连接信息填入

 修改JdbcUtil代码

读取配置文件

 测试:

 

6、完整工具类代码
package com.zhou.utils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;


// 这是一个jdbc的工具类
public class JdbcUtil {
    private static String url;
    private static String user;
    private static String passwd;
    private static String driver;


    static {
        try {
            // 1、创建properties集合类
            Properties properties = new Properties();
            // 2、加载配置文件
            InputStream resourceAsStream = JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");
            properties.load(resourceAsStream);
            url = properties.getProperty("url");
            user = properties.getProperty("user");
            passwd = properties.getProperty("password");
            driver = properties.getProperty("driver");

            // 注册驱动
            Class.forName(driver);

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,user,passwd);
    }
    
    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();
            }
        }
    }
    public static void close(PreparedStatement pstmt, Connection conn) {
        if (pstmt != null) {
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

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


    
    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();
            }
        }
    }
    public static void close(ResultSet rs, PreparedStatement 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();
            }
        }
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/737497.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号