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

【MySQL】Java连接MySQL数据库(封装版只需会MySQL)

一、准备

  1. 普通项目

如果创建的是普通的Java项目,我们需要去maven仓库下载jdbc驱动包然导入项目中就能使用,具体步骤详见MySQL数据库之Java中如何使用数据库【JDBC编程】

  1. maven项目

如果创建的项目是maven项目,我们只需在pom.xml文件里引入一组依赖即可

<dependencies><!--jdbc--><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency></dependencies>

引入依赖后点击右侧的maven刷新即可

创建类导入代码

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class JDBCDemo {private static DataSource dataSource;private static String database;private static String password;private static int port = 3306;  //如果修改了端口号提供设置/*** 提供构造方法 传入操作的数据库名称 与 数据库的密码* @param database 数据库名* @param password 数据库密码*/public JDBCDemo(String database,String password) throws SQLException {if (password == null){password = "";}if (database == null || database == ""){throw new SQLException("数据库名为空");}this.database = database;this.password = password;}/*** 如果修改了MySQL的端口号就进行设置* @param port*/public void setPort(int port){this.port = port;}// 封装CRUDprivate int SQL(String sql){int n = 0;Connection connection = null;PreparedStatement statement = null;try {// 建立连接connection = DBUtil.getConnect();// 构造请求statement = connection.prepareStatement(sql);// 发送请求n = statement.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {// 释放资源DBUtil.close(connection,statement,null);}return n;}public boolean insert(String sql) {return SQL(sql) == 1 ? true : false;}public boolean delete(String sql){return SQL(sql) == 1 ? true : false;}public boolean update(String sql) {return SQL(sql) == 1 ? true : false;}/**** @param map 键值对:  字段名:字段对应的Java类型* @param sql 对应的查询sql语句* @return 返回M键值对:   字段名:值(需要根据具体类型进行转换)*/public HashMap<String,String> select(Map<String,String> map, String sql){HashMap<String,String> result = new HashMap<>();Connection connection = null;PreparedStatement statement = null;ResultSet resultSet = null;try {// 建立连接connection = DBUtil.getConnect();// 构造sqlstatement = connection.prepareStatement(sql);// 处理响应resultSet = statement.executeQuery();Set<Map.Entry<String,String>> entry = map.entrySet();while (resultSet.next()){for (Map.Entry<String ,String> x : entry) {switch (x.getKey()){case "int":int i = resultSet.getInt(x.getValue());result.put(x.getValue(),String.valueOf(i));break;case "double":double d = resultSet.getDouble(x.getValue());result.put(x.getValue(),String.valueOf(d));break;case "float":float f = resultSet.getFloat(x.getValue());result.put(x.getValue(),String.valueOf(f));break;case "byte":byte b = resultSet.getByte(x.getValue());result.put(x.getValue(),String.valueOf(b));break;case "char":String c = resultSet.getString(x.getValue());result.put(x.getValue(),String.valueOf(c));break;case "String":result.put(x.getValue(),x.getKey());break;case "long":long l = resultSet.getLong(x.getValue());result.put(x.getValue(), String.valueOf(l));break;case "short":short s = resultSet.getShort(x.getValue());result.put(x.getValue(),String.valueOf(s));break;default:throw new Exception("类型错误");}}}} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();} finally {DBUtil.close(connection,statement,resultSet);}return result;}/*** 封装与数据库连接相关的操作*/private static class DBUtil {/*** 单例模式封装数据源* @return*/private static DataSource getInstance(){if (dataSource == null){synchronized (JDBCDemo.class){if (dataSource == null){dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:" + JDBCDemo.port + "/"+ JDBCDemo.database + "?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword(JDBCDemo.password);}}}return dataSource;}/*** 与数据库建立连接* @return*/private static Connection getConnect() throws SQLException {return getInstance().getConnection();}/*** 释放资源* @param connection* @param statement* @param resultSet*/private static void close(Connection connection, PreparedStatement statement, ResultSet resultSet) {if(resultSet != null){try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if(statement != null){try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if(connection != null){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

二、API

  1. 创建实例JDBCDemo传入要操作的数据库的库名以及数据库密码

  1. 如果修改过MySQL的端口号调用setPort(int)方法进行设置

  1. 进行数据库增删改查

  1. 代码示例如下

方法名

参数

说明

insert

String sql

只需传入增加数据的SQL语句即可

update

String sql

只需传入修改的SQL语句即可

delete

String sql

只需传入删除的SQL语句即可

inselect

Map<String,String> map, String sql

map是一组键值对,键是要查询数据库表的字段名,值是其对应的Java类型(如varchar(20)对应String)

public static void main(String[] args) throws SQLException {// 1.创建实例,传入数据库名(此处的数据库是指create database创建的数据库里与密码JDBCDemo jdbcDemo= new JDBCDemo("student","这里是数据库密码");// 2.如果修改过数据库的端口号可调用一下方法修改,默认是没有修改的jdbcDemo.setPort(3306);// 3.添加数据String name = "李四";int age = 10;jdbcDemo.insert("insert into student values(" + name + "," + age + ")");jdbcDemo.update("update student set age=" + 11 + "where name='李四'");jdbcDemo.delete("delete from student where name='张三'");// 获取树数据HashMap<String,String> tableName = new HashMap<>();map.put("name","String");map.put("age","int");HashMap<String,String> ret = jdbcDemo.select(map,"select * from student");int studentAge = Integer.parseInt(map.get("age"));}

相关文章:

【MySQL】Java连接MySQL数据库(封装版只需会MySQL)

一、准备普通项目如果创建的是普通的Java项目&#xff0c;我们需要去maven仓库下载jdbc驱动包然导入项目中就能使用&#xff0c;具体步骤详见MySQL数据库之Java中如何使用数据库【JDBC编程】maven项目如果创建的项目是maven项目&#xff0c;我们只需在pom.xml文件里引入一组依赖…...

【java基础】运算符

运算符 operator 运算符优先级 Operators 操作员Precedence 优先级postfix 后缀expr expr--unary 一元的expr --expr expr -expr ~ !multiplicative 〔数〕乘法的 / %additive 添加剂 -shift 移动<< >> >>>relational 关系的< > < > insta…...

带噪学习-概述

在实际应用的时候&#xff0c;我们的样本不会是完全干净的&#xff0c;即存在噪声样本。那使用存在噪声的样本时&#xff0c;我们如何更有效的进行模型学习呢&#xff1f;Label Dependent Nose样本选择&#xff08;Sample Selection&#xff09;第一种很直接的想法&#xff0c;…...

Scratch少儿编程案例-多彩打地鼠

专栏分享 点击跳转=>Unity3D特效百例点击跳转=>案例项目实战源码点击跳转=>游戏脚本-辅助自动化点击跳转=>Android控件全解手册点击跳转=>Scratch编程案例👉关于作者...

为什么拔掉计算机网线还能ping通127.0.0.1?

前言 当我们在计算机上拔掉网线之后&#xff0c;发现我们仍然可以使用ping命令来ping通本机的IP地址127.0.0.1&#xff0c;这让很多人感到困惑&#xff0c;认为拔掉网线后计算机就无法与外界通信了&#xff0c;为什么还能ping通本机的IP地址呢&#xff1f; 本文的目的是通过对…...

Android kotlin 内、外部存储根目录及测试(可以实现仿微信未读消息数提示数字)

<<返回总目录 文章目录 一、内部存储与外部存储三、外部存储的写读测试(可以实现仿微信未读消息数提示数字)一、内部存储与外部存储 所有Android设备都有两个文件存储区域:内部存储空间(internal Storage)和外部存储空间(external Storage)。所以,Android系统从逻…...

Android 7.0 OTA升级(高通)

文章目录1. Full OTA 方式升级介绍1.1 Full OTA 制作第一步&#xff1a;生成 msm89xx-target_files-eng.XXX.zip1.2 Full OTA 制作第二步&#xff1a;Modem 等非 HLOS 加入升级包的方法1.3 Full OTA 制作第三步&#xff1a;生成 update.zip 升级包2. Incremental OTA 方式升级介…...

工作负载之DeployMent

DeployMent 无状态工作负载&#xff08;Deployment&#xff09;&#xff1a;即kubernetes中的“Deployment”&#xff0c;无状态工作负载支持弹性伸缩与滚动升级&#xff0c;适用于实例完全独立、功能相同的场景&#xff0c;如&#xff1a;nginx、wordpress等。 也是公司中应…...

淘宝tmall页面数据获取,API接口对接程序

item_get-获得淘宝商品详情请求参数请求参数&#xff1a;num_iid652874751412&is_promotion1参数说明&#xff1a;num_iid:淘宝商品IDis_promotion:是否获取取促销价响应参数Version: Date:2022-04-04名称类型必须示例值描述itemitem[]1宝贝详情数据num_iidBigint152081325…...

基于粒子群优化算法的电动汽车充放电V2G研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

java并发编程原理2 (AQS, ReentrantLock,线程池)

一、AQS&#xff1a; 1.1 AQS是什么&#xff1f; AQS就是一个抽象队列同步器&#xff0c;abstract queued sychronizer&#xff0c;本质就是一个抽象类。 AQS中有一个核心属性state&#xff0c;其次还有一个双向链表以及一个单项链表。 首先state是基于volatile修饰&#x…...

研报精选230219

目录 【行业230219山西证券】煤炭行业周报&#xff1a;复工改善&#xff0c;港口价格企稳反弹【行业230219中航证券】农林牧渔行业周观点&#xff1a;一号文件落地&#xff0c;生物育种超势不改【行业230219华西证券】汽车行业周报&#xff1a;新车密集上市 自主转型提速【个股…...

【PPPoE】PPPoE拨号流程

简介 PPPoE&#xff08;Point-to-Point Protocol over Ethernet&#xff09;是一种在以太网上封装PPP协议的方式&#xff0c;常用于在宽带接入中进行拨号。 PPPoE的拨号原理如下&#xff1a; 客户端发起PPPoE Active Discovery Initiation (PADI)报文&#xff0c;广播到网络…...

django项目实战(django+bootstrap实现增删改查)

目录 一、创建django项目 二、修改默认配置 三、配置数据库连接 四、创建表结构 五、在app当中创建静态文件 六、页面实战-部门管理 1、实现一个部门列表页面 2、实现新增部门页面 3、实现删除部门 4、实现部门编辑功能 七、模版的继承 1、创建模板layout.html 1&…...

Lesson4---Python语言基础(2)

4.1 内置数据结构 4.1.1 序列数据结构&#xff08;sequence&#xff09; 成员是有序排列的每个元素的位置称为下标或索引通过索引访问序列中的成员Python中的序列数据类型有字符串、列表、元组 “abc” ≠ “bac” 4.1.1.1 创建列表和元组 Python中的列表和元组&#xff0c…...

NCHW - NHWC - CHWN 排列

TensorFlow有两种数据格式NHWC和NCHW,默认的数据格式是NHWC,可以通过参数data_format指定数据格式。这个参数规定了 input Tensor 和 output Tensor 的排列方式。 1、data_format 设置为 “NHWC” 时,排列顺序为 [batch, height, width, channels] 设置为 “NCHW” 时,排…...

2019蓝桥杯真题矩阵切割(填空题) C语言/C++

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小明有一些矩形的材料&#xff0c;他要从这些矩形材料中切割出一些正方形。 当他面对一块矩形材料时&#xff0c;他总是从中间切割一刀&#xff0c;切出一块最大的正…...

Java线程池的创建以及原理

一、为什么要使用线程池 在外面的日常开发中&#xff0c;也使用了不少池化技术&#xff0c;比如线程池、数据库连接池、HTTP连接池等等都是对这个思想的应用。 池化技术的思想主要是为了减少每次获取资源的消耗&#xff0c;提高对资源的利用率。 线程池提供了一种限制和管理资…...

Java集合学习之Map

1.什么是Map Java里的Map接口是一个集合根接口&#xff0c;表示一个 键值对&#xff08;Key-Value&#xff09; 的映射。 简单来说就是键和值是一对的&#xff0c;每一个 Key都有唯一确定的 Value对应。 其中要求 键&#xff08;Key&#xff09; 唯一&#xff0c;因为是按照…...

java 基于maven多模块合并打包部署

项目环境 jdk 1.8spring 2.7.xmaven 3.6 项目结构 模块功能 client – 对外service common – 共用工具切面等 main – 启动类 goods – 子模块具体实现 模块间依赖关系 client – 无依赖 common – 无依赖 main – client、common、goods goods – client、common 具体P…...

Kubernetes是个什么东东?

Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态&#xff0c;其服务、支持和工具的使用范围相当广泛。 Kubernetes 这个名字源于希腊语&#xff0c;意…...

【go语言grpc之client端源码分析三】

go语言grpc之server端源码分析三newClientStreamnewAttemptLocked上一篇在介绍了grpc.Dial之后&#xff0c;然后再介绍一下后面的 //创建RPC客户端client : pb.NewGreetsClient(conn)//设置超时时间_, cancel : context.WithTimeout(context.Background(), time.Second)defer c…...

Android 基础知识4-2.6LinearLayout(线性布局)

一、LinearLayout的概述 线性布局&#xff08;LinearLayout&#xff09;主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中&#xff0c;如果水平排列&#xff0c;垂直方向上只能放一个控件&#xff0c;如果垂直排列&#xff0c;水平方向上也只能…...

补充前端面试题(三)

图片懒加载<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, in…...

.net开发安卓入门-自动升级(配合.net6 webapi 作为服务端)

文章目录思路客户端权限清单&#xff08;AndroidManifest.xml&#xff09;权限列表(完整内容看 权限清单&#xff08;AndroidManifest.xml&#xff09;&#xff09;打开外部应用的权限(完整内容看 权限清单&#xff08;AndroidManifest.xml&#xff09;&#xff09;添加文件如下…...

分享111个HTML艺术时尚模板,总有一款适合您

分享111个HTML艺术时尚模板&#xff0c;总有一款适合您 111个HTML艺术时尚模板下载链接&#xff1a;https://pan.baidu.com/s/1sYo2IPma4rzeku3yCG7jGw?pwdk8dx 提取码&#xff1a;k8dx Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 时尚理发沙龙服务网站模…...

spring之Spring AOP基于注解

文章目录前言一、Spring AOP基于注解的所有通知类型1、前置通知2、后置通知3、环绕通知4、最终通知5、异常通知二、Spring AOP基于注解之切面顺序三、Spring AOP基于注解之通用切点三、Spring AOP基于注解之连接点四、Spring AOP基于注解之全注解开发前言 通知类型包括&#x…...

LeetCode题目笔记——6362. 合并两个二维数组 - 求和法

文章目录题目描述题目链接题目难度——简单方法一&#xff1a;常规双指针遍历代码/Python方法二&#xff1a;字典\哈希表代码/Python总结题目描述 给你两个 二维 整数数组 nums1 和 nums2. nums1[i] [idi, vali] 表示编号为 idi 的数字对应的值等于 vali 。nums2[i] [idi, …...

【C#基础】C# 常用语句讲解

序号系列文章3【C#基础】C# 数据类型总结4【C#基础】C# 变量和常量的使用5【C#基础】C# 运算符总结文章目录前言语句概念1&#xff0c;迭代语句1.1 for 语句1.2 foreach 语句1.3 while 语句1.4 do 语句2&#xff0c;选择语句2.1&#xff0c;if 语句2.2&#xff0c;else 语句2.3…...

腾讯云——负载均衡CLB

负载均衡 CLB 提供四层&#xff08;TCP 协议/UDP 协议/TCP SSL 协议&#xff09;和七层&#xff08;HTTP 协议/HTTPS 协议&#xff09;负载均衡。您可以通过 CLB 将业务流量分发到多个后端服务器上&#xff0c;消除单点故障并保障业务可用性。CLB 自身采用集群部署&#xff0c;…...

wordpress搭建博客视频教程/网络舆情分析报告模板

文章目录课程总结作业1、符号地图2、连续面积图3、 圆视图4、仪表板课程总结 tableau进阶&#xff1a;数据集合并、符号地图、智能显示、插入自定义形状、仪表板课程总结 作业 第5次课作业&#xff1a; 使用“豆瓣电影数据.xlsx”文件&#xff0c;完成以下作业&#xff1b; …...

做代购网站有哪些东西/阳东网站seo

一腔热血的你是否想通过自己的双手实现自己的梦想&#xff0c;却无从下手&#xff1f;彷徨迷茫的你是否感到薪水已经配不上你的能力&#xff0c;空有抱负&#xff0c;却无处施展&#xff1f;认真执着的你是否一直苦于自学钻研&#xff0c;却遇到了瓶颈&#xff0c;难以进步&…...

东莞人才网站/百度app下载链接

美女&#xff0c;当你选择丈夫时&#xff0c;请先把电子工程师与以下的职业作一番比较&#xff1a;      医生几乎所有女人都喜欢追求当医生的。所以不要期望你们的婚姻能持续五年以上&#xff0c;因为早晚有一天&#xff0c;他会跟某个护士小姐跑掉的&#xff0c;或是被…...

曲靖手机网站建设/seo推广任务小结

我只知道可以在表格中加入如下代码&#xff1a;bordercolorlight “#739ed6 ” bordercolordark “#FFeeee ”使表格变为立体的。但是想用css规定表格形式&#xff0c;应该如何写才能实现这个效果呢&#xff1f;1.代码如下&#xff1a;复制代码代码如下:sss inset:inset outset…...

网站空间名词解释/网易最新消息新闻

伪原创是目前最鲜为人知的文章处理方式&#xff0c;做seo网站优化的也许知道&#xff0c;目前传统的文章伪原创方式的作用已经是越来越低了&#xff0c;所以我们文章在做伪原创时必须要提高伪原创文章的原创度&#xff0c;这样才能让搜索引擎更加信任我们&#xff0c;给我们的文…...

郑州 网站建设 东区/河南网站优化公司哪家好

优惠券平台项目 分成四大模块来做微服务&#xff0c;优惠券模板服务、计算服务、用户服务和平台类组件 优惠券模板服务&#xff1a;模板规则是创建具体优惠券的前置条件&#xff0c;每种类型的模板都是一个计算公式&#xff0c;这个公式约定了优惠计算的方式。在这个项目中&am…...