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

【Python学习笔记】第二十五节 Python MySQL

Python 连接到 MySQL 数据库有几种不同的连接方法,而且不是所有的方法都能与不同的操作系统很好地配合.

MySQL connector/Python模块是Oracle支持的官方驱动,用于通过Python连接MySQL。该连接器完全是Python语言,而mysqlclient是用C语言编写的。它也是独立的,意味着它不需要MySQL客户端库或标准库以外的任何Python模块。

注意,MySQL Connector/Python不支持旧的MySQL服务器认证方法,这意味着4.1之前的MySQL版本不能工作。

本文实例的运行环境:

  • Windows 10

  • MySQL 8.0


一、创建数据库连接

1、首先安装mysql-connector-python模块。

python -m pip install mysql-connector

2、连接数据库:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root"  # 数据库密码
)print(mydb)

运行结果

<mysql.connector.connection.MySQLConnection object at 0x000002B399503AC0>

二、创建数据库

1、创建数据库使用 "CREATE DATABASE" 语句,以下创建一个名为 python_demo 的数据库:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root"  # 数据库密码
)print(mydb)myCursor = mydb.cursor()myCursor.execute("CREATE DATABASE python_demo")

2、使用 "SHOW DATABASES" 语句来查看数据库是否存在:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root"  # 数据库密码
)print(mydb)myCursor = mydb.cursor()# myCursor.execute("CREATE DATABASE python_demo")
myCursor.execute("SHOW DATABASES")for x in myCursor:print(x)
  • 我们可以直接连接数据库,如果数据库不存在,会输出错误信息:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)print(mydb)

三、创建数据表

创建数据表使用 "CREATE TABLE" 语句,创建数据表前,需要确保数据库已存在,以下创建一个名为 user 自增主键的数据表:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)# print(mydb)myCursor = mydb.cursor()
myCursor.execute("CREATE TABLE user (id int(11) primary key not null auto_increment,name VARCHAR(64), mobile VARCHAR(32), address VARCHAR(255))")
  • 如果我们的表已经创建,我们需要使用 ALTER TABLE 来给表添加主键:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)# print(mydb)myCursor = mydb.cursor()
myCursor.execute("ALTER TABLE user ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY")

四、插入数据

  • 插入数据使用 "INSERT INTO" 语句:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)# print(mydb)myCursor = mydb.cursor()sql = "INSERT INTO user (name, mobile,address) VALUES (%s, %s, %s)"
val = ("Lily", "13866669999", "America")
myCursor.execute(sql, val)
mydb.commit()  # 提交print(myCursor.rowcount, "插入成功。")
  • 批量插入

批量插入使用 executemany() 方法,该方法的第二个参数是一个元组列表,包含了我们要插入的数据:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)# print(mydb)myCursor = mydb.cursor()sql = "INSERT INTO user (name, mobile,address) VALUES (%s, %s, %s)"
# val = ("Lily", "13866669999", "America")val = [("LiLei", "13866668888", "China"),("Jim", "13855558888", "America"),("HanMeimei", "13811113333", "China")
]
# myCursor.execute(sql, val)
myCursor.executemany(sql, val)mydb.commit()  # 提交print(myCursor.rowcount, "插入成功。")
3 插入成功。

五、查询数据

1、查询数据使用 SELECT 语句:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)myCursor = mydb.cursor()myCursor.execute("SELECT * FROM user")result = myCursor.fetchall()  # fetchall() 获取所有记录for x in result:print(x)
  • 读取指定的字段数据:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)myCursor = mydb.cursor()# myCursor.execute("SELECT * FROM user")
myCursor.execute("SELECT name, mobile, address FROM user")
result = myCursor.fetchall()  # fetchall() 获取所有记录for x in result:print(x)
  • 读取一条数据,可以使用 fetchone() 方法:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)myCursor = mydb.cursor()# myCursor.execute("SELECT * FROM user")
myCursor.execute("SELECT name, mobile, address FROM user")
# result = myCursor.fetchall()  # fetchall() 获取所有记录
result = myCursor.fetchone()  # fetchall() 获取一条记录
print(result)
('Lily', '13866669999', 'America')

2、where 条件语句

如果我们要读取指定条件的数据,可以使用 where 语句:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)myCursor = mydb.cursor()# myCursor.execute("SELECT * FROM user")
myCursor.execute("SELECT * FROM user where address ='America'")
result = myCursor.fetchall()  # fetchall() 获取所有记录
# result = myCursor.fetchone()  # fetchall() 获取一条记录
# print(result)
for x in result:print(x)
(1, 'Lily', '13866669999', 'America')
(3, 'Jim', '13855558888', 'America')
  • 为了防止数据库查询发生 SQL 注入的攻击,我们可以使用 %s 占位符来转义查询的条件:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)myCursor = mydb.cursor()
# myCursor.execute("SELECT * FROM user where address ='America'")sql = "SELECT * FROM user where address = %s"
param = ("China",)myCursor.execute(sql, param)result = myCursor.fetchall()  # fetchall() 获取所有记录for x in result:print(x)
(2, 'LiLei', '13866668888', 'China')
(4, 'HanMeimei', '13811113333', 'China')

3、排序

查询结果排序可以使用 ORDER BY 语句,默认的排序方式为升序,关键字为 ASC,如果要设置降序排序,可以设置关键字 DESC

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)myCursor = mydb.cursor()
# myCursor.execute("SELECT * FROM user  ORDER BY name")
sql = "SELECT * FROM user ORDER BY name"
myCursor.execute(sql)
result = myCursor.fetchall()  # fetchall() 获取所有记录for x in result:print(x)
(4, 'HanMeimei', '13811113333', 'China')
(3, 'Jim', '13855558888', 'America')
(2, 'LiLei', '13866668888', 'China')
(1, 'Lily', '13866669999', 'America')
  • 降序排序实例:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)myCursor = mydb.cursor()
# myCursor.execute("SELECT * FROM user  ORDER BY name")
sql = "SELECT * FROM user ORDER BY address DESC "
myCursor.execute(sql)
result = myCursor.fetchall()  # fetchall() 获取所有记录for x in result:print(x)
(2, 'LiLei', '13866668888', 'China')
(4, 'HanMeimei', '13811113333', 'China')
(1, 'Lily', '13866669999', 'America')
(3, 'Jim', '13855558888', 'America')

4、Limit

如果我们要设置查询的数据量,可以通过 "LIMIT" 语句来指定

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)myCursor = mydb.cursor()
# myCursor.execute("SELECT * FROM user  ORDER BY name")
sql = "SELECT * FROM user LIMIT 2 "myCursor.execute(sql)
result = myCursor.fetchall()  # fetchall() 获取所有记录for x in result:print(x)
(1, 'Lily', '13866669999', 'America')
(2, 'LiLei', '13866668888', 'China')
  • 指定起始位置,使用的关键字是 OFFSET

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)myCursor = mydb.cursor()
# sql = "SELECT * FROM user LIMIT 2 "
sql = "SELECT * FROM user LIMIT 2 OFFSET 1"myCursor.execute(sql)
result = myCursor.fetchall()  # fetchall() 获取所有记录for x in result:print(x)
(2, 'LiLei', '13866668888', 'China')
(3, 'Jim', '13855558888', 'America')

六、删除记录

删除记录使用 "DELETE FROM" 语句:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)myCursor = mydb.cursor()
sql = "DELETE FROM user WHERE name = 'Jim'"myCursor.execute(sql)
mydb.commit()print(myCursor.rowcount, " 条记录删除")
1  条记录删除
  • 为了防止数据库查询发生 SQL 注入的攻击,我们可以使用 %s 占位符来转义删除语句的条件:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)myCursor = mydb.cursor()sql = "DELETE FROM user WHERE name = %s"
param = ("HanMeimei",)myCursor.execute(sql, param)
mydb.commit()print(myCursor.rowcount, " 条记录删除")
1  条记录删除

七、更新表数据

数据表更新使用 "UPDATE" 语句:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)myCursor = mydb.cursor()sql = "UPDATE user SET name = 'Lucy' WHERE name = 'Lily'"myCursor.execute(sql)
mydb.commit()print(myCursor.rowcount, " 条记录被修改")
1  条记录被修改
  • 为了防止数据库查询发生 SQL 注入的攻击,我们可以使用 %s 占位符来转义更新语句的条件:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)myCursor = mydb.cursor()sql = "UPDATE user SET name = %s WHERE name = %s"
param = ("HanMeimei", "LiLei")myCursor.execute(sql, param)
mydb.commit()print(myCursor.rowcount, " 条记录被修改")
1  条记录被修改

八、删除表

删除表使用 "DROP TABLE" 语句, IF EXISTS 关键字是用于判断表是否存在,只有在存在的情况才删除:

# coding=utf-8import mysql.connectormydb = mysql.connector.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)myCursor = mydb.cursor()myCursor.execute("SHOW TABLES")for x in myCursor:print(x)sql = "DROP TABLE IF EXISTS user_info"  # 删除数据表 user_info
myCursor.execute(sql)print(" 删除数据表 user_info")myCursor.execute("SHOW TABLES")for x in myCursor:print(x)
('user',)
('user_info',)删除数据表 user_info
('user',)

相关文章:

【Python学习笔记】第二十五节 Python MySQL

Python 连接到 MySQL 数据库有几种不同的连接方法&#xff0c;而且不是所有的方法都能与不同的操作系统很好地配合.MySQL connector/Python模块是Oracle支持的官方驱动&#xff0c;用于通过Python连接MySQL。该连接器完全是Python语言&#xff0c;而mysqlclient是用C语言编写的…...

折叠屏手机自带的屏幕表面层为什么不能自己撕?

计划入手折叠屏手机的小伙伴看过来&#xff0c;因为折叠屏手机外观的特殊形态&#xff0c;在日常使用中与普通直板手机屏幕的养护还是有着很大的不同&#xff0c;比如直板机入手后新机开箱撕膜这个操作&#xff0c;对于折叠屏手机来说&#xff0c;万万不可&#xff01;除此之外…...

20.hadoop系列之Yarn资源调度器

Yarn是一个资源调度平台&#xff0c;负责为运算程序提供服务器运算资源&#xff0c;相当于一个分布式的操作系统&#xff0c;而MapReduce等运算程序则相当于运行于操作系统之上的应用程序 1.Yarn基础架构 Yarn主要由ResourceManager、NodeManager、ApplicationMaster和Contai…...

206页16万字城市运行“一网统管”体系建设项目需求报告

本资料来源网络&#xff0c;知识分享&#xff0c;仅供个人学习&#xff0c;请勿商用。完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 第 一 章 应用场景示例 一.1 一卡通人员管理针对企业厂区、办公楼等场所人员出入频繁、安保问题多样化、管理环节复杂等现状&#…...

【JS】数组Array的使用

arr.length 3 通过设置数组长度&#xff0c;实现截取数组&#xff0c;改变原数组 map 循环遍历数组&#xff0c;不改变原数组&#xff0c;返回一个新的数组&#xff08;可用变量接收&#xff09; forEach 循环遍历数组&#xff0c;不改变原数组 join 把数组转化为字符串&…...

2023年,软件测试怎么样?

2022年因为各种不可抗力原因&#xff0c;大厂裁员&#xff0c;失业等等频频受到关注。 不解释&#xff0c;确实存在&#xff0c;各行各业都很难&#xff0c;但是&#xff0c;说软件测试行业不吃香&#xff0c;我还真不认同&#xff08;不是为培训机构说好话&#xff0c;大环境…...

【学习笔记】NOMURA Programming Competition 2020

C - Folia 不难想到自底向上确定树的形态。可能要多尝试一下 一开始想错了好几个地方&#xff0c;服了 假设某一层有XXX个节点&#xff0c;那么上一层可能有⌈X2⌉,⌈X2⌉1,...,X\lceil\frac{X}{2}\rceil,\lceil\frac{X}{2}\rceil1,...,X⌈2X​⌉,⌈2X​⌉1,...,X个节点&…...

iis下常用程序的伪静态规则列表(包括wordpress、thinkphp)

shopex discuz2.0 discuz2.5 discuz3.x 淘宝客 ecshop phpwind参照http://www.west.cn/faq/list.asp?unid797通过主机面板设置即可 wordpress设置&#xff1a; 第一步&#xff1a; 1.新建一个“chineseurl.php”文件&#xff1a;在里面写入以下代码上传到wordpress安装目录。…...

【Python语言基础】——Python Select From

Python语言基础——Python Select From 文章目录 Python语言基础——Python Select From一、Python Select From一、Python Select From 从表中选取 如需从 MySQL 中的表中进行选择,请使用 “SELECT” 语句: 实例 从表 “customers” 中选取所有记录,并显示结果: import m…...

数据增广真有那么神奇吗?

作者&#xff1a;皮皮雷 来源&#xff1a;投稿 编辑&#xff1a;学姐 论文题目 How Effective is Task-Agnostic Data Augmentation for Pretrained Transformers? 论文作者 S. Longpre, Y. Wang, and C. DuBois 论文发表于 2020 EMNLP findings 摘要 任务无关的数据增广…...

常用基础硬件知识 - 判断MOS管导通

目录1. 概述2. 判断MOS管的导通1. 概述 本文主要记录下基础的硬件知识&#xff0c;方便自己查阅。 2. 判断MOS管的导通 在产品硬件设计中&#xff0c;有时需要程序控制一些电源使能。 1.原理图已经标出了G极(gate)—栅极、S极(source)—源极、D极(drain)—漏极。 如果没有标…...

2023金三银四,测试人还能找到好工作吗?

嫌看文章麻烦的朋友点这里&#xff1a;2023最新软件测试行业变革细谈之我们该如何应对&#xff1f; 按照往年的惯例&#xff0c;春节后复工的 3 月、4 月是人员跳槽最频繁的时候&#xff0c;俗称“金三银四”。然而&#xff0c;市场大环境的影响&#xff0c;很多行业感受到了一…...

c++构造函数

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、构造函数1.构造函数的形式2.构造函数的调用时机3.委托构造函数4.复制构造函数二、析构函数本文仅为个人笔记 视频链接&#xff1a;https://www.bilibili.com/vid…...

redis 未授权访问漏洞

redis 未授权访问漏洞 目录 redis 未授权访问漏洞 漏洞描述 漏洞原因&#xff1a; 漏洞危害 漏洞复现&#xff1a; 漏洞复现 写webshell: 写计划任务&#xff1a;centos默认在/var/spool/cron 写ssh公钥实现ssh登录&#xff1a; 漏洞描述&#xff1a; Redis默认情况下…...

如何制作一个自定义的winpe?

winpe制作过程 获取相关资源 https://www.aliyundrive.com/s/MP58JbRsm76 文件存放位置 将压缩包存放在一个全英文目录下了,我这里选择了D:/winpe目录 解压文件 将三个压缩包进行解压到当前目录,如下图所示 创建一个mount目录,并在mount目录下分别创建boot和install目…...

QString转为2进制,8进制,10进制,16进制介绍

首先看段代码&#xff1a; bool ok false;QString ss "11";qDebug()<<"-----"<<ss.toInt(&ok,2)<<ss.toInt(&ok,10)<<ss.toInt(&ok,16)<<ss.toInt(&ok,8);结果&#xff1a; ----- 3 11 17 9 bool ok fal…...

2023-3-2-22:01随笔

好久没怎么更新技术分享博客了。去年从2022年1月3日到2023年1月份一直专注于ADAS的行车横向功能的研发与实车调试&#xff0c;2022年写了几篇项目经验的文章&#xff0c;像LQR算法&#xff08;虽然和同事&#xff08;志同道合&#xff0c;技术追求的民哥&#xff09;写出的工程…...

学习红客技术必备,手把手教你成为“安防第一人”

互联网时代已悄悄来临&#xff0c;作为新时代的人们&#xff0c;我们日常生活、工作、学习方面都需要借助互联网来完成&#xff0c;这样&#xff0c;又产生一种新的问题&#xff0c;那就是网络安全的问题&#xff0c;有时我们拼命加班好不容易完成的东西&#xff0c;在一夜之间…...

Git系列:常见指令辨析

Git系列&#xff1a;常见指令辨析指令辨析工作区、暂存区、版本库傻傻分不清楚&#xff1f;主干和分支的关系是什么&#xff1f;git fetch/merge/pull辨析日志查看时&#xff0c;git log与git reflog的区别是&#xff1f;git diff和status的区别是&#xff1f;相关资料本文小结…...

并发编程实战-构建自定义的同步工具

文章目录1.状态依赖性的管理1.1 示例&#xff1a;将前提条件的失败传递给调用者1.2 示例&#xff1a;通过轮询与休眠来实现简单的阻塞1.3 条件队列2.使用条件队列2.1 条件谓词2.2 过早唤醒2.3 丢失的信号2.4 通知2.5 示例&#xff1a;阀门类2.6 子类的安全问题2.7 入口协议与出…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...