JDBC连接数据库及改造工具类

news2024/12/23 8:43:39

 

 

 

 

 引入mysql驱动依赖,一般会建个lib包,如果是java web项目  一般将以来包创建在web->WEB-INF下,

这里我就随便了

 

 建议

try {
    
} catch (SQLException throwables) {
    throwables.printStackTrace();
}finally {
    
}

的写法,这里就简写了

写个工具类

public class DBUtil {

    static{
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //获取数据库连接对象  抛异常,谁使用,谁负责
    public static Connection getConnection(String url,String username,String password) throws SQLException {
        Connection connection = DriverManager.getConnection(url, username, password);
        return connection;
    }

    /**
     * 释放资源
     * @param conn 数据库连接对象
     * @param st 执行对象
     * @param rs 结果集对象
     */
    public static void close(Connection conn, Statement st, ResultSet rs){

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

 上面工具类的坏处就是换数据库驱动要改源码,改进下

在src下新建个文件夹  resource  如果不能创建,简单粗暴的方式,

 创建个jdbc.properties文件,名字随意

新建个类DBUtil1,ResourceBundle会读resource目录下的文件

public class DBUtil1 {
    //静态变量:在类加载时候执行,并且是有先后顺序的.自上而下
    private static ResourceBundle bundle=ResourceBundle.getBundle("resource.jdbc");
    private static String driver=bundle.getString("driver");
    private static String url=bundle.getString("url");
    private static String username=bundle.getString("username");
    private static String password=bundle.getString("password");

    static{
        //注册驱动(注册却动只需要注册一次,放在静态代码块当中.DBUtil1类加载的时候执行)
       try {
            //"com.mysql.jdbc.Driver"是连接数据库的驱动,不能写死,因为可能以后改成Oracle数据库
            //如果连接Oracle数据库的时候,还需要修改java代码,显然违背OCP开闭原则
            //OCP开闭原则:对扩展开发,对修改关闭.(什么是复合OCP呢?在进行功能扩展的时候,不需要修改java源代码)
            //Class.forName("com.mysql.cj.jdbc.Driver");
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //获取数据库连接对象  抛异常,谁使用,谁负责
    public static Connection getConnection() throws SQLException {
        Connection connection = DriverManager.getConnection(url, username, password);
        return connection;
    }

    //关闭连接 释放资源

    /**
     * 释放资源
     * @param conn 数据库连接对象
     * @param st 执行对象
     * @param rs 结果集对象
     */
    public static void close(Connection conn,Statement st,ResultSet rs){

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

新建个类Test1测试

 

public class Test1 {
    public static void main(String[] args) throws SQLException {
//        Connection connection = DBUtil1.getConnection();
//        System.out.println(connection);
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs=null;

        try {
            conn = DBUtil1.getConnection();

            String sql="select * from user";
            ps=conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()){


                
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil1.close(conn, ps, rs);
        }

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/861847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言案例 完数求解-09

题目:编写一个程序找出1000以内的所有完数。 步骤一:定义程序目标 编写一个C程序,输出1000以内的所有完数 步骤二:程序设计 1.完数原理:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6 1 …

__attribute__ ((constructor))和__attribute__ ((destructor))用法

目录 1. 前言 2. __attribute__介绍 3. 测试代码 4. 总结 1. 前言 最近看代码,有个函数根本就没被任何函数调用,但从程序运行结果来看,该函数是被调用了的,找很久都没找到哪里调用了,最后发现该函数…

Java顺序表解析与应用

一、顺序表概念 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 二、主要功能接口实现 Java顺序表底层就是一个动态数组。其主要功能接口如下: // 1.打印顺序表&#xff0…

stack(栈)和queue(队列)

目录 1.stack的介绍和使用(栈) 1.1 stack的介绍 1.2 stack的使用 1.3stack的模拟实现 2.queue的介绍和使用(队列) 2.1queue的介绍 2.3queue的模拟实现 3.priority_queue的介绍和使用 3.1priority_queue的介绍 3.2 priority_queue的使用 3.3priority_queue的模拟实现 …

高忆管理:碳酸锂期现货价格大幅回落 行业期盼找回“价格之锚”

6月末以来,国内碳酸锂价格的反弹态势戛然而止,再度陷入接连跌落格式。现货方面,据上海钢联数据显现,电池级碳酸锂价格6月26日至今已接连22次下调,从31.50万元/吨下调至最新的25.60万元/吨;期货方面&#xf…

【问题解决】Git命令行常见error及其解决方法

以下是我一段时间没有使用xshell,然后用git命令行遇到的一些系列错误和他们的解决方法 遇到了这个报错: fatal: Not a git repository (or any of the parent directories): .git 我查阅一些博客和资料,可以解决的方式: git in…

MyBatis操作数据库常见用法总结2

文章目录 1.动态SQL使用什么是动态sql为什么用动态sql标签拼接标签拼接标签拼接标签拼接标签拼接 补充1:resultType和resultMap补充2:后端开发中单元测试工具使用(Junit框架) 1.动态SQL使用 以insert标签为例 什么是动态sql 是…

vue3+vite使用vite-plugin-svg-icons

使用vite-plugin-svg-icons插件显示本地svg图标 在开发项目的时候,经常会用到svg矢量图标,而且我们使用svg以后,页面上加载的不再是图片资源,这对页面性能来说是个很大的提升,而且我们svg文件比img要小很多&#xff0c…

使用xrdp协议远程桌面控制树莓派,无需公网IP!

远程桌面控制树莓派,我们可以用xrdp协议来实现,它内部使用的是windows远程桌面的协议。我们只需要在树莓派上安装xrdp,就可以在同个局域网下远程桌面控制树莓派。 而如果需要在公网下远程桌面控制树莓派,可以通过cpolar内网穿透&…

Linux固件子系统的实现机制简介

一、Linux固件子系统概述 固件是硬件设备自身执行的一段程序。固件一般存放在设备flash内。而出于成本和便利性的考虑,通常是先将硬件设备的运行程序打包为一个特定格式的固件文件,存储到终端系统内,通过终端系统给硬件设备进行升级。Linux内…

self-attention(自注意力机制)

先举个有趣的例子理解 Q 、 K 、 V Q、K、V Q、K、V: 将我们要查询的内容,和商品列表进行相似度匹配,先拿出相似度更高的商品列表。 再根据以往的评价,计算出总分,按照分数进行排序。 self-attention d k \sqrt{d_k}…

ubuntu 安装 python

ubuntu 安装 python 初环境与设备查询是否安装安装python 本篇文章将介绍ubuntu 安装 python 初 希望能写一些简单的教程和案例分享给需要的人 环境与设备 系统:ubuntu 查询是否安装 因为系统也许会自带一个python,所以验证一下,如果自…

Linux mysql5.7开启 binlog

查看 mysql是否开启 binlog。 查看命令: show variables like %log_bin%; log_bin OFF 是关闭的状态。 编辑my.cnf配置文件 vim /etc/my.cnf 默认的配置文件内容: 增加下面内容 server_id 1 binlog_format ROW log-bin mysql_log_bin 重启mysq…

uniapp 微信小程序 订阅消息

第一步&#xff0c;需要先去小程序官方挑选一下订阅模板拿到模板id 订阅按钮在头部导航上&#xff0c;所以 <u-navbar :bgColor"bgColor"><view class"u-nav-slot" slot"left" click"goSubscribe"><image :src"g…

【Java】try|catch|throws 具体详解+应用

目录 tryCatch 基本介绍 使用细节 throws异常处理 基本介绍 ​ 使用细节 自定义异常 基本概念 步骤 throw和throws的区别 tryCatch 基本介绍 使用细节 throws异常处理 基本介绍 使用细节 自定义异常 基本概念 步骤 throw和throws的区别

常见的软件项目质量管理5种方法

产品质量的重要性不言而喻&#xff0c;为了确保项目质量&#xff0c;我们需要快速高效地找出影响产品质量的因素。如果不能及时高效洞察影响因素&#xff0c;无法及时修复项目缺陷和Bug&#xff0c;往往会对项目造成意想不到的后果和风险&#xff0c;如需求变更、重要开发节点延…

【雕爷学编程】Arduino动手做(201)---行空板开发环境之Jupyter

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

数据库运维是什么意思?主要工作包含哪些?

还有不少小伙伴不知道数据库运维是什么意思&#xff1f;主要工作内容包含哪些&#xff1f;今天我们就一起来简单了解一下吧&#xff0c;仅供参考哦&#xff01; 数据库运维是什么意思&#xff1f; 数据库运维是指对数据库系统进行管理、监控和维护的过程&#xff0c;以确保数据…

CMU 15-445 -- Introduction to Distributed Databases - 19

CMU 15-445 -- Introduction to Distributed Databases - 19 引言System ArchitectureShared MemoryShared DiskShared Nothing Early Distributed Database SystemsDesign IssuesHomogeneous VS. Heterogeneous Database PartitioningNaive Table PartitioningHorizontal Part…

第一章 SpringBoot入门

1.SpringBoot简介 1.1.简介 Spring Boot来简化spring应用开发&#xff0c;约定大于配置去繁从简&#xff0c;just run就能创建一个独立的&#xff0c;产品级别的应用。 背景&#xff1a;J2EE笨重开发&#xff0c;繁多的配置、低下开发效率、复杂的部署流程、第三方技…