当前位置: 首页 > news >正文

如何将常用的jdbc方法封装起来???

你是否还在为每次新建项目连接数据库而烦恼???(教你一次代码,简单完成每次连接)

 1.建立maven项目

还没下载安装或者不会建立maven项目的可以看这里哦:maven的下载安装与配置环境变量!!!(全网最详细)_明天更新的博客-CSDN博客

2.编写配置文件。

  <dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- com.mysql/mysql-connector-j --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.1.0</version></dependency></dependencies>

3.在项目的src/main/resources文件下建立db.properties文件,并写入一下代码。

db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql:/book
db.username=root
db.password=

4.编写工具类。

/** Copyright (c) 2020, 2023,  All rights reserved.**/
package cn;import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.*;/*** <p>Project: jdbcUnitls - Untils</p>* <p>Powered by scl On 2023-08-15 19:12:41</p>* <p>描述:<p>** @author 孙臣龙 [1846080280@qq.com]* @version 1.0* @since 17*/
public class Untils {private String driver;private String url;private String username;private String password;private Connection con;//初始化自动建立连接public Untils() {connect();}//初始化传参可以连接自定义数据库public Untils(String url, String username, String password) {this.url = url;this.username = username;this.password = password;connect(url, username, password);}//建立连接,默认数据库public void connect() {Class<Untils> until = Untils.class;InputStream db = until.getClassLoader().getResourceAsStream("db.properties");Properties prop = new Properties();try {prop.load(db);this.driver = prop.getProperty("db.driver", "com.mysql.cj.jdbc.Driver");Class.forName(this.driver);this.url = prop.getProperty("db.url", "jdbc:mysql:/mysql");this.username = prop.getProperty("db.username", "root");this.password = prop.getProperty("db.password", "");con = DriverManager.getConnection(this.url, this.username, this.password);} catch (Exception e) {e.printStackTrace();}}//建立连接,指定数据库public void connect(String url, String username, String password) {try {Class.forName(driver);con = DriverManager.getConnection(url, username, password);} catch (Exception e) {e.printStackTrace();}}//获取版本号public String version() {String ver = "";try {ver = this.con.getMetaData().getDatabaseProductVersion();} catch (Exception e) {e.printStackTrace();}return ver;}//建立数据库public void creatdatabase(String dbname) {try {String sql = "create database if not exists " + dbname;PreparedStatement ps = con.prepareStatement(sql);ps.execute();} catch (Exception e) {e.printStackTrace();}}//删除数据库public void deletedatabase(String dbname) {try {String sql = "drop database if exists " + dbname;PreparedStatement ps = con.prepareStatement(sql);ps.execute();} catch (Exception e) {e.printStackTrace();}}//查看所有数据库(排除系统数据库)public Set<String> showdatabase() {Set<String> set = new HashSet<>();try {String sql = "show databases";PreparedStatement ps = con.prepareStatement(sql);ResultSet rs = ps.executeQuery();Set<String> exclude = new HashSet<>(List.of("information_schema", "performance_schema", "test", "sys", "mysql"));while (rs.next()) {String database = rs.getString(1);if (exclude.contains(database)) continue;set.add(rs.getString(1));}rs.close();ps.close();} catch (Exception e) {e.printStackTrace();}return set;}//查看指定数据库的所有表public List<String> showtables(String dbname) {List<String> list = new ArrayList<>();try {String sql = "show tables ";if (dbname != null && dbname.length() > 0) {sql = "show tables from " + dbname;}PreparedStatement ps = con.prepareStatement(sql);ResultSet rs = ps.executeQuery();while (rs.next()) {list.add(rs.getString(1));}ps.close();rs.close();} catch (Exception e) {e.printStackTrace();}return list;}//查看使用数据库的表public List<String> showtables() {String dbname = "";try {String sql = "select database()";PreparedStatement ps = con.prepareStatement(sql);ResultSet rs = ps.executeQuery();if (rs.isBeforeFirst()) {rs.next();dbname = rs.getString(1);}} catch (Exception e) {e.printStackTrace();}return showtables(dbname);}//关闭连接public void close() {try {con.close();} catch (Exception e) {e.printStackTrace();}}public String getDriver() {return driver;}public void setDriver(String driver) {this.driver = driver;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Connection getCon() {return con;}public void setCon(Connection con) {this.con = con;}
}

5.将你写好的项目进行打包。

不会打包的可以作为参考:maven如何打包你会吗?_明天更新的博客-CSDN博客

 6.将打包文件复制到常用架包文件夹中。

 

 

 7.使用架包(一行代码连接数据库)

 

 

 

有小伙伴就有疑问啦: 这就结束了????多少是有点简单了

后续功能你可以根据自己所学进行添加。

 

相关文章:

如何将常用的jdbc方法封装起来???

你是否还在为每次新建项目连接数据库而烦恼&#xff1f;&#xff1f;&#xff1f;&#xff08;教你一次代码&#xff0c;简单完成每次连接&#xff09; 1.建立maven项目 还没下载安装或者不会建立maven项目的可以看这里哦&#xff1a;maven的下载安装与配置环境变量&#xff0…...

【1day】复现任我行协同CRM存在SQL注入漏洞

目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现 一、漏洞描述 任我行CRM是CRM(客户关系管理)、OA(自动化办公)、OM(目标管理)、KM(知识管理)、HR(人力资源)一体化的企业管理软件。通过建立组织运营管理铁三角(目标行动-企业文化-知识复制),一...

3D虚拟形象数字替身的制作及应用介绍

“虚拟数字人”这一词汇已经深入人心。从虚拟偶像、虚拟代言人到虚拟主播、虚拟员工各种类型虚拟数字形象不断进入公众视野&#xff0c;由于其与Z世代的独特亲和力以及与新媒体平台的高度适配性&#xff0c;虚拟数字人在各个领域都在呈崛起之势&#xff0c;并且有着深度的融合&…...

Spring中JavaBean的生命周期及模式

( 本篇文章大部分讲述了是底层知识&#xff0c;理念及原理 ) ( 如果只想了解&#xff0c;看我标记的重点即可&#xff0c;如果想明白其中原理&#xff0c;请耐心看完&#xff0c;对你大有受益 ) 目录 一、简介 ( 1 ) 是什么 ( 2 ) 背景概述 ( 3 ) 作用 二、生命周期 2.1 …...

Qt5开发环境-银河麒麟V10ARM平台

目录 前言1.源码下载2.编译安装2.1 安装依赖2.2 编译2.3 遇到的问题2.4 安装 3.编译qtwebengine3.1 安装依赖库3.2 编译3.3 遇到的问题3.4 安装 4.配置开发环境5.测试6.程序无法输入中文的问题总结 前言 近期因参与开发的某个软件需要适配银河麒麟v10arm 平台&#xff0c;于是…...

「Qt」文件读写操作

0、引言 我们知道 C 和 C 都提供了文件读写的类库&#xff0c;不过 Qt 也有一套自己的文件读写操作&#xff1b;本文主要介绍 Qt 中进行文件读写操作的类 —— QFile。 1、QFileDialog 文件对话框 一般的桌面应用程序&#xff0c;当我们想要打开一个文件时&#xff0c;通常会弹…...

0101前期准备-大数据学习

文章目录 1 前言2 配置VMware虚拟机2.1 设置主机名和固定IP2.2 本地系统与Linux系统配置主机名映射2.3 配置虚拟机之间用户的SSH免密互通2.4 安装JDK环境2.5 关闭防火墙和SELinux2.6 更新时区和同步时间2.7 保存虚拟机快照 结语 1 前言 我们从基础的hadoop开始学起&#xff0c;…...

TypeScript教程(四)基本运算符

一、运算符 TypeScript包含以下几种运算符&#xff1a; 1.算术运算符 2.逻辑运算符 3.关系运算符 4.按位运算符 5.赋值运算符 6.三元/条件运算符 7.字符串运算符 8.类型运算符 1.算术运算符 y5 运算符描述例子x 运算结果y 运算结果加法xy275-减法xy-235*乘法xy*2105…...

计算机网络的性能指标

计算机网络的性能指标 1. 速率 速率是指数据在网络中传送的速度&#xff0c;通常用比特率或数据率来表示&#xff0c;单位是b/s&#xff0c;或bit/s&#xff0c;即比特每秒&#xff0c;或者bps(bit per second)。 速率单位&#xff1a;1 Ybps 10^24 bps(尧), 1 Zbps 10^21…...

BBS项目day04 文章详情页、点赞点菜、评论功能

一、路由 from django.contrib import admin from django.urls import path, re_path from app01 import views from django.views.static import serve from django.conf import settingsurlpatterns [path(admin/, admin.site.urls),# 注册path(register/, views.register)…...

el-table分页后序号连续的两种方法

实现效果&#xff1a; 第一页排序到10&#xff0c;第二页的排序应从11开始 实现方法一&#xff1a; 在el-table的序号列中使用template定义 <el-table><el-table-columnmin-width"10%"label"序号"><template slot-scope"scope"…...

Nginx反向代理技巧

跨域 作为一个前端开发者来说不可避免的问题就是跨域&#xff0c;那什么是跨域呢&#xff1f; 跨域&#xff1a;指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的&#xff0c;是浏览器对javascript施加的安全限制。浏览器的同源策略是指协议&#xff0c;域名…...

kafka--kafka的基本概念-副本概念replica

三、kafka的基本概念-副本概念replica Broker 表示实际的物理机器节点 Broker1中的绿色P1表示主分片Broker2中的蓝色P1表示副本分片&#xff0c;其余类似&#xff0c;就是主从的概念&#xff0c;如果一个Broker挂掉了&#xff0c;还有其它的节点来保证数据的完整性 P可以看做分…...

css伪元素实现li列表圆点相连+锚点跳转悬浮窗实现

实现效果&#xff1a; html代码&#xff1a; <div class"sidenav"><ul class"nav-text progressbar"><!-- data-target的值对应要跳转的模块的id --><li data-target"module1"><div class"text">锚点…...

IronPDF for .NET Crack

IronPDF for .NET Crack ronPDF现在将等待HTML元素加载后再进行渲染。 IronPDF现在将等待字体加载后再进行渲染。 添加了在绘制文本时指定旋转的功能。 添加了在保存为PDFA时指定自定义颜色配置文件的功能。 IronPDF for.NET允许开发人员在C#、F#和VB.NET for.NET Core和.NET F…...

【C++进阶】继承、多态的详解(多态篇)

【C进阶】继承、多态的详解&#xff08;多态篇&#xff09; 目录 【C进阶】继承、多态的详解&#xff08;多态篇&#xff09;多态的概念多态的定义及实现多态的构成条件&#xff08;重点&#xff09;虚函数虚函数的重写&#xff08;覆盖、一种接口继承&#xff09;C11 override…...

excel快速选择数据、选择性粘贴、冻结单元格

一、如何快速选择数据 在excel中&#xff0c;希望选择全部数据&#xff0c;通常使用鼠标选择数据然后往下拉&#xff0c;当数据很多时&#xff0c;也可单击单元格使用ctrl A选中全部数据&#xff0c;此外&#xff0c;具体介绍另一种方法。 操作&#xff1a;ctrl shift 方向…...

【数仓建设系列之一】什么是数据仓库?

一、什么是数据仓库&#xff1f; 数据仓库(Data Warehouse&#xff0c;简称DW)简单来讲&#xff0c;它是一个存储和管理大量结构化和非结构化数据的存储集合&#xff0c;它以主题为向导&#xff0c;通过整合来自不同数据源下的数据(比如各业务数据&#xff0c;日志文件数据等)…...

Vue2-配置脚手架、分析脚手架、render函数、ref属性、props配置项、mixin配置项、scoped样式、插件

&#x1f954;:总有一段付出了没有回报的日子 是在扎根 更多Vue知识请点击——Vue.js VUE2-Day6 配置脚手架脚手架结构render函数vue.js与vue.runtime.xxx.js的区别引入render函数为什么要引入残缺的vue呢&#xff1f; 脚手架默认配置ref属性props配置项传递数据接收数据注意点…...

VS2015项目中,MFC内存中调用DLL函数(VC6生成的示例DLL)

本例主要讲一下&#xff0c;用VC6如何生成DLL&#xff0c;用工具WinHex取得DLL全部内容&#xff0c;VC2015项目加载内存中的DLL函数&#xff0c;并调用函数的示例。 本例中的示例代码下载&#xff0c;点击可以下载 一、VC6.0生成示例DLL项目 1.新建项目&#xff0c;…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...