首页 > 其他分享 >JDBC之封装工具类(重用性方案)

JDBC之封装工具类(重用性方案)

时间:2023-01-29 10:33:05浏览次数:45  
标签:JDBC 封装 resultSet 重用 connection sql import public

JDBC之封装工具类(重用性方案)

实际JDBC使用过程中,存在大量重复代码,例如连接和数据库和关闭数据库

我们需要把传统JDBC代码重构,抽取JDBC工具类,以后连接数据库,释放资源,都可以使用这个工具类

工具类核心思想

封装获取连接,释放资源的两个方法

  1. public static Connection getConnection(){}方法获取连接。

  2. public static void closeAll(){}方法释放资源.

案例:测试类

package com.qf.JDBC;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;

public class JDBC简化1 {
    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = scanner.nextLine();//next遇到空格结束,nextline能读取空格
        System.out.println("请输入钱数:");
        String money = scanner.nextLine();
       //用工具类注册驱动,获得连接
        Connection connection = DBUtils.getConnection();

        //执行sql语句
        //获得PreparedStatement对象,预编译Sql语句
        PreparedStatement preparedStatement = connection.prepareStatement("select * from accounts where name =? and money=?;");
        //每一个参数都有一个占位符?,在执行SQL语句之前,要给占位符赋值,占位符顺序从一开始
        preparedStatement.setString(1,username);
        preparedStatement.setString(2,money);
        //执行sql语句,并接收结果
        ResultSet resultSet = preparedStatement.executeQuery();
        if(resultSet.next()){
            System.out.println("登录成功!");
        }else{
            System.out.println("登录失败!");
        }
        DBUtils.closeAll(connection,preparedStatement,resultSet);
    }
}

  工具类:

package com.qf.JDBC;

import java.sql.*;

public class DBUtils {
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection(){
        Connection connection = null;
        try {
            //加载驱动到虚拟机这一步没必要每次连接数据库都执行,写在静态代码块里,在类创建的时候就只执行一次
            //Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC";
            String name ="root";
            String password = "123456";
            connection = DriverManager.getConnection(url,name,password);
        }  catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
    public static void closeAll(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();
        }
    }
}

运行结果:

请输入用户名: A 请输入钱数: 1000 Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. 登录成功!

Process finished with exit code 0

 

 

标签:JDBC,封装,resultSet,重用,connection,sql,import,public
From: https://www.cnblogs.com/zhangtiedangg/p/17071938.html

相关文章

  • JAVA的JDBC基础
    JDBC概念JDBC就是使用Java语言操作关系型数据库的一套API全称:(JavaDataBaseConnectivity)Java数据库连接 JDBC好处各数据库厂商使用相同的接口,Java代码......
  • elementui表格封装
    <template><divid="commonTable"><divclass="common_table"><el-table:data="tableData"ref="multipleTable"v-loading="loading"......
  • JDBC防止SQL注入
    JDBC防止SQL注入1.PreparedStatement的应用作用:1.预编译sql语句,效率高2.安全,防止sql注入3.可以动态的填充数据,执行多个同构的SQL语句 packagecom.qf.JDBC;......
  • JdbcTemplate的使用
    配置文件注入<beanid="jdbcTemplateIeCenter"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="XXDataSource"></property> <......
  • JDBC之Sql注入问题
    JDBC之Sql注入问题用户输入的数据包括sql关键字或者语法,导致sql查询时where后面的条件固定为truesql注入的语法1.用户名+‘+or1=1;#案例packagecom.qf.JDBC;​impo......
  • python对接API二次开发高级实战案例解析:百度地图Web服务API封装函数(行政区划区域检索
    文章目录​​前言​​​​一、IP定位​​​​1.请求URL​​​​2.获取IP定位封装函数​​​​3.输出结果​​​​二、国内天气查询​​​​1.请求url​​​​2.天气查询封装......
  • WPF鼠标、键盘、拖拽事件、用行为封装事件
    WPF鼠标、键盘、拖拽事件、用行为封装事件本文主要介绍了WPF中常用的鼠标事件、键盘事件以及注意事项,同时使用一个案例讲解了拓展事件。除此之外,本文还讲述如何用行为(Behav......
  • WPF鼠标、键盘、拖拽事件、用行为封装事件
    WPF鼠标、键盘、拖拽事件、用行为封装事件本文主要介绍了WPF中常用的鼠标事件、键盘事件以及注意事项,同时使用一个案例讲解了拓展事件。除此之外,本文还讲述如何用行为(Beha......
  • proteus仿真软件中芯片的命名规则与封装方法(详细版)
    第一:PCB封装库命名规则1、集成电路(直插)用DIP-引脚数量+尾缀来表示双列直插封装​尾缀有N和W两种,用来表示器件的体宽​为体窄的封装,体宽300mil,引脚间距2.54mm​为体宽的封......
  • Vue3 封装扩展并简化Vuex在组件中的调用
    如果你在项目中使用了vuex模块化,并且在项目中使用actions中函数调用频率高,推荐了解一下这种方式。比如下面两种方式调用,第一个是直接传参设置,第二个是添加了异步ajax......