8-JDBC 编程
目录
1.数据库编程的必备条件
PS:程序是怎么操作数据库的?
2.什么是JDBC?
2.1.JDBC定义
2.2.JDBC工作原理
3.JDBC使用
3.1.创建项目并添加MySQL驱动包
3.2.使用代码操作数据库
3.2.1.获得数据源
3.2.2.获得连接
3.2.3.获得执行器
3.2.4.查询或操作数据库
3.2.5.关闭数据库连接
执行代码——插入
执行代码——修改、删除
执行代码——查询
PS:使用DriverManager实现查询
1.数据库编程的必备条件
- 编程语言,如Java,C、C++、Python等。
- 数据库,如Oracle,MySQL,SQL Server等。
- 数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的, 要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。
PS:程序是怎么操作数据库的?
实际开发中,SQL很少是手动输入的,绝大多数的SQL都是通过代码,自动执行的。重复执行同一条SQL,且不确定执行多少次?就需要让其他编程语言程序来操作数据库服务器。
- 自己实现数据库客户端很容易,因为各种数据库本身提供了一系列操作的API。官方维护——Oracle。
- 自己实现数据库服务器就很难了,因为包含存储引擎、使用啥样的数据结构来组织数据,存储数据、SQL执行引擎、基于编译原理能对SQL进行解析和优化。
API:Application Program Interface,好比拿到个啥东西,这个东西能提供哪些功能/服务。
- Java标准库就提供一些API:这个API里有一些随机数、scanner、集合类等(一组类/方法);
- C标准库的API:#include<stdio.h>、scanf、printf、fopen、fclose。
- 操作系统也提供一些API:操作硬盘的文件、访问一下内存的内容、重置一下网卡的状态......包括模拟鼠标事件、模拟硬盘事件(以类/方法提供的);
- MySQL也会提供一些API(最初是C语言,为了使用广泛,提供了多个其他语言版本的API,其他语言版本的API本质还是调用C的API,跨语言调用)用来操作数据库,完成各种增删改查操作了。
使⽤程序之所以能操作数据库,主要是因为数据库⼚商提供了操作的 API,也就是数据库驱动,驱使数据库⾏动起来。不光是程序,像我们之所以能通过命令⾏操作 MySQL,也是因为 MySQL 的数据库驱动,对于操作界⾯来说,数据库驱动就是:
输⼊的命令就是 MySQL 数据驱动的⼀部分。
数据库驱动包含了数据库操作 API,它们的关系如下:
2.什么是JDBC?
在了解 JDBC 概念之前,先来想⼏个问题:
- 不同数据库⼚商的数据库驱动⼀样吗?
- 不同数据库⼚商的 API 调⽤⼀样吗?
- 使⽤ Java 程序只操作 MySQL 吗?还是有可能操作 Oracle、Sql Server、DB2 等数据库?
以上的答案都是否定的,也就是说不同⼚商提供了不同的数据库驱动,提供了不同的 API 接⼝,那 Java 程序要怎么实现? 难道是针对⼀个数据库写⼀套调⽤的⽅法吗?因为驱动和 API 完全不同,所以不同的数据操作也是不同的,要针对每种数据库写⼀套调⽤代码就太麻烦了,那要怎么办? 解决以上问题的办法就是使⽤ JDBC。
2.1.JDBC定义
JDBC,即 Java Database Connectivity,Java 数据库连接。是⼀种⽤于执⾏ SQL 语句的 Java API, 它是 Java 中的数据库连接规范。这个 API 由 java.sql.*、javax.sql.* 包中的⼀些类和接⼝组成,它为 Java 开发⼈员操作数据库提供了⼀个标准的 API,可以为多种关系数据库提供统⼀访问。
简单来说,使⽤了 JDBC 之后,不管是什么数据库与什么数据库驱动,只需要使⽤⼀套标准代码就可以实现对不同数据库进⾏统⼀操作(添加、修改、删除、查询),也就解决了上⾯说的那些问题了。
C++操作哪个数据库,就使用哪个API。
Java运行在JVM上,C++运行在CPU上。
2.2.JDBC工作原理
JDBC 为多种关系数据库提供了统⼀访问⽅式,作为特定⼚商数据库访问 API 的⼀种⾼级抽象, 它主要包含⼀些通⽤的接⼝类。 JDBC 访问数据库层次结构:

JDBC 优势:
- Java 语⾔访问数据库操作完全⾯向抽象接⼝编程。
- 开发数据库应⽤不⽤限定在特定数据库⼚商的 API。
- 程序的可移植性⼤⼤增强。

3.JDBC使用
3.1.创建项目并添加MySQL驱动包
Oracle官网特别难用,去Maven这个版本的中央仓库下载驱动包:

选择时大版本是5.1即可~和数据库服务器版本对应。
- 黑客(黑帽子)发现一些软件漏洞(相当于是代码里的bug),对系统进行攻击,进一步入侵操控你的电脑。
- 白客(白帽子)发现软件漏洞后,通知开发者,赶紧修复。
- 红客:2001年,中美黑客大战,中国一群黑客入侵美国政府网站,给网站上插红旗,称为红客。





新建文件夹lib。复制刚才下载的jar包,粘贴到lib下。


此时idea就可以解析jar包里包含的内容了。

3.2.使用代码操作数据库
操作数据库 MySQL 提供了两种操作 API:
- DriverManager
- DataSource(推荐使⽤)
接下来咱们使⽤ DataSource 来实现操作数据库。 使⽤代码操作数据库分为以下 5 个步骤:
- 获取数据源(准备⼯作,点击 MySQL 连接⼯具,并输⼊⽤户名、密码)
- 获取连接(敲击回⻋试图建⽴客户端和服务器端的连接)
- 获取执⾏器(连接到服务器并切换到数据库)
- 查询或操作数据库(输⼊命令,并得到结果)
- 关闭连接(关闭客户端)
3.2.1.获得数据源
不同的数据库,对于数据源的描述,是存在差异的!有的数据库是通过用户名、密码来认证,有的不是,比如SQLLite。
URL:
- jdbc:mysql - 这个url是给idbc中的mysql来使用的。
- 127.0.0.1 - 数据库服务器所在的IP地址,换回IP,表示主机自己(相当于java中的this)只要数据库服务器和jdbc程序是在同一台电脑上,就可以使用这个IP地址。
- 3306 - 端口号,mysql安装时配置的默认端口号。
- java106 - 访问的数据库名。
- characterEncoding=utf8 - 描述了请求的字符编码方式,一般都设置为utf8。
- useSSL=false - 关闭数据库加密功能,此处没必要加密,手动关了,如果不关,有些可能会连接失败。
//使用 jdbc 往数据库中,插入一个记录
//需要提前准备好数据库(java106)和数据表(student)//1.创建数据源,描述了数据库服务器在哪
DataSource dataSource = new MysqlDataSource(); //向上转型
//设置数据库所在的地址和端口以及数据库名,当前是固定写法
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java106?characterEncoding=utf8&useSSL=false"); //向下转型
//这样写的好处是后续代码使用DataSource类型的实例,避免MysqlDataSource这个名字扩散到代码的各个地方(高内聚),未来要是换数据库,只改动这一个代码即可// //也可以不做任何转型
// MysqlDataSource mysqlDataSource = new MysqlDataSource();
// mysqlDataSource.setURL();//指定数据库登录的用户:root,这是mysql自带的用户,也可配置别的,但基本用不到((MysqlDataSource)dataSource).setUser("root");
//指定数据库登录的密码,密码就是安装数据库的时候,手动设置的密码((MysqlDataSource)dataSource).setPassword("12345678");
3.2.2.获得连接
- Connection是网络通信中的核心概念,叫“连接”。
- Link是“链接”。
//2.和数据库建立网络连接,写的 jdbc 代码本质上是实现一个 mysql 客户端,要通过网络和服务器进行通信
Connection connection = dataSource.getConnection();//通过控制台,来输入用户的信息
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学号:");
int id = scanner.nextInt();
System.out.println("请输入姓名:");
String name = scanner.next();
3.2.3.获得执行器
执⾏器是⽤来执⾏ SQL 命令的,执⾏器有三种:
- Statement
- PreparedStatement
- CallableStatement

实际开发中最常⽤的是 PreparedStatement 对象,PreparedStatement 优点如下:

PreparedStatement 有主要两种重要的⽅法:
- executeQuery():⽅法执⾏后返回单个结果集的,通常⽤于 select 语句。
- executeUpdate():⽅法返回值是⼀个整数,指示受影响的⾏数,通常⽤于 update、insert、 delete 语句。
//3.构造一个sql语句,来完成插入操作
String sql = "insert into student values(?,?)"; //占位符(1,2)此处不是从0开始计算,而是从1开始计算
//jdbc中还需要搭配一个特定的对象,来描述这里的sql的情况
PreparedStatement statement = connection.prepareStatement(sql); //会对sql语句做一些处理解析,减轻mysql服务器的压力
//填充占位符
statement.setInt(1,id);
statement.setString(2, name);
System.out.println("sql:" + statement);
3.2.4.查询或操作数据库
//4.执行sql语句,控制客户端给服务器发送网络请求,返回结果的含义是这个操作影响到几行
/*** 针对增、删、改,使用executeUpdate来执行* 针对查,使用executeQuery来执行*/
int ret = statement.executeUpdate();
System.out.println("ret = " + ret);
3.2.5.关闭数据库连接
//5.断开数据库连接,并且释放必要的资源,资源释放的顺序和创建的顺序是相反的
statement.close();
connection.close();
执行代码——插入

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;public class JDBCInsertDemo {public static void main(String[] args) throws SQLException {//使用 jdbc 往数据库中,插入一个记录//需要提前准备好数据库(java106)和数据表(student)//1.创建数据源,描述了数据库服务器在哪DataSource dataSource = new MysqlDataSource(); //向上转型//设置数据库所在的地址和端口以及数据库名,当前是固定写法((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java106?characterEncoding=utf8&useSSL=false"); //向下转型//这样写的好处是后续代码使用DataSource类型的实例,避免MysqlDataSource这个名字扩散到代码的各个地方(高内聚),未来要是换数据库,只改动这一个代码即可// //也可以不做任何转型
// MysqlDataSource mysqlDataSource = new MysqlDataSource();
// mysqlDataSource.setURL();//指定数据库登录的用户:root,这是mysql自带的用户,也可配置别的,但基本用不到((MysqlDataSource)dataSource).setUser("root");//指定数据库登录的密码,密码就是安装数据库的时候,手动设置的密码((MysqlDataSource)dataSource).setPassword("12345678");//2.和数据库建立网络连接,写的 jdbc 代码本质上是实现一个 mysql 客户端,要通过网络和服务器进行通信Connection connection = dataSource.getConnection();//通过控制台,来输入用户的信息Scanner scanner = new Scanner(System.in);System.out.println("请输入学号:");int id = scanner.nextInt();System.out.println("请输入姓名:");String name = scanner.next();//3.构造一个sql语句,来完成插入操作String sql = "insert into student values(?,?)"; //占位符(1,2)此处不是从0开始计算,而是从1开始计算//jdbc中还需要搭配一个特定的对象,来描述这里的sql的情况PreparedStatement statement = connection.prepareStatement(sql); //会对sql语句做一些处理解析,减轻mysql服务器的压力statement.setInt(1,id);statement.setString(2, name);System.out.println("sql:" + statement);//4.执行sql语句,控制客户端给服务器发送网络请求,返回结果的含义是这个操作影响到几行/*** 针对增、删、改,使用executeUpdate来执行* 针对查,使用executeQuery来执行*/int ret = statement.executeUpdate();System.out.println("ret = " + ret);//5.断开数据库连接,并且释放必要的资源,资源释放的顺序和创建的顺序是相反的statement.close();connection.close();}
}

执行代码——修改、删除
和插入的代码非常像,只需改动sql语句即可~
执行代码——查询
查询数据库使⽤ PreparedStatement.executeQuery ⽅法,返回⼀个 ResultSet 对象。
ResultSet 对象它被称为结果集,它代表符合 SQL 语句条件的所有⾏,并且它通过⼀套 getXXX ⽅法提供了对这些⾏中数据的访问。
ResultSet ⾥的数据⼀⾏⼀⾏排列,每⾏有多个字段,并且有⼀个记录指针,指针所指的数据⾏叫做当前数据⾏,我们只能来操作当前的数据⾏。我们如果想要取得某⼀条记录,就要使⽤ ResultSet 的 next() ⽅法 ,如果我们想要得到 ResultSet ⾥的所有记录,就应该使⽤ while 循环。
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;public class JDBCSelectDemo {public static void main(String[] args) throws SQLException {DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java106?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("12345678");Connection connection = dataSource.getConnection();String sql = "select * from student where id>?";PreparedStatement statement = connection.prepareStatement(sql);statement.setInt(1,2);ResultSet resultSet = statement.executeQuery();while(resultSet.next()) {//next初始情况下,光标指向第一行的前面,移动一下光标,光标指向下一行,然后移动到结尾,就返回 false//使用getXX方法获取到每一列//获取int,就使用getInt,获取String,就使用getString//这里的参数,就是数据库表的列名int id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println(id + ":" + name);}statement.close();connection.close();}
}


PS:使用DriverManager实现查询
jdbc支持2种风格的代码,一个是DriverManager,一个是DataSource。
- DriverManager使用时,需要借助反射,反射不属于常规的编程手段,是特殊情况下的特殊手段。
- DataSource相比于DriverManager,内置了数据库连接池,可以重复利用连接。 推荐使用DataSource。
使⽤ DriverManager 只是获取 Connection 之前的两步代码不⼀样:
import java.sql.*;public class App2 {public static void main(String[] args) throws SQLException, ClassNotFoundException {// 1.加载JDBC驱动程序:反射,这样调⽤初始化com.mysql.jdbc.Driver类,即将该类加载到JVM⽅法区,并执⾏该类的静态⽅法块、静态属性。Class.forName("com.mysql.jdbc.Driver");// 2.创建数据库连接Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java33?user=root&password=12345678&characterEncoding=UTF-8&useSSL=true");// 3.获得执⾏器PreparedStatement statement = connection.prepareStatement("select * from student where username=?");// 3.1 占位符赋值statement.setString(1, "王五");// 4.获得结果集ResultSet resultSet = statement.executeQuery();// 4.1 获得结果并打印while (resultSet.next()) {String sn = resultSet.getString("sn");String username = resultSet.getString("username");String mail = resultSet.getString("mail");System.out.println(String.format("SN:%s,UserName:%s,Mail:%s", sn, username, mail));}// 5. 关闭资源resultSet.close();connection.close();}
}
实际开发中,用框架Mybatis,JPA这些框架来代替JDBC。
相关文章:
8-JDBC 编程
目录 1.数据库编程的必备条件 PS:程序是怎么操作数据库的? 2.什么是JDBC? 2.1.JDBC定义 2.2.JDBC工作原理 3.JDBC使用 3.1.创建项目并添加MySQL驱动包 3.2.使用代码操作数据库 3.2.1.获得数据源 3.2.2.获得连接 3.2.3.获得执行器 …...
零基础如何学习 Web 安全?
Web安全不仅是互联网的核心,而且还是云计算和移动互联网的最佳载体。对于信息安全从业者而言,Web安全是一个非常重要的研究课题之一。 Web应用是指采用B/S架构、通过HTTP/HTTPS协议提供服务的统称。随着互联网的广泛使用,社交网络、聊天工具…...
【简单实用框架】【AddressablesMgr】【可移植】
☀️博客主页:CSDN博客主页💨本文由 萌萌的小木屋 原创,首发于 CSDN💢🔥学习专栏推荐:面试汇总❗️游戏框架专栏推荐:游戏实用框架专栏⛅️点赞 👍 收藏 ⭐留言 📝&#…...
android 12.0Launcher3禁止拖拽app图标到第一屏
1.概述 在12.0进行定制化开发Launcher3中,会对Launcher3 做些要求,比如现在的需求就是Launcher3第一屏的图标固定,不让其他屏的图标拖动到 第一屏所以说这个需求和 禁止拖拽图标到Hotseat类似,也是从WorkSpace.java里面寻找解决方案 2.Launcher3禁止拖拽app图标到第一屏相…...
SkyLine简介
简介 SkyLine产品系列(TerraExplorer 、TerraGate、TerraBuilder)是一套优秀的三维数字地球平台软件。凭借其国际领先的三维数字化显示技术,它可以利用海量的遥感航测影像数据、数字高程数据以及其他二三维数据搭建出一个对真实世界进行模拟…...
算法基础学习笔记——④前缀和\差分\双指针\位运算
✨博主:命运之光 ✨专栏:算法基础学习 目录 ✨前缀和 ✨一维前缀和 🍓一维前缀和模板: ✨二维前缀和 🍓二位前缀和模板: 前言:算法学习笔记记录日常分享,需要的看哈O(∩_∩)O&a…...
【Linux系统基础快速入门详解】Linux下安装软件必知必会4种方法(yum,编译安装,rpm包,二进制方式)等详解
在 Linux 下安装软件有多种方法可供选择,常用的包括 yum、编译安装、rpm 包和二进制方式。下面对这些方法进行详细说明: 使用 yum 安装软件yum 是 Red Hat 系列 Linux 发行版中常用的软件包管理工具,通过 yum 可以方便地安装、升级和删除软件包。yum 默认从官方仓库中下载软…...
ASEMI代理长电可控硅BT136参数,BT136规格,BT136说明
编辑-Z 长电可控硅BT136参数: 型号:BT136 RMS通态电流IT(RMS):6A 非重复浪涌峰值导通电流ITSM:25A 峰值栅极电流IGM:2A 平均栅极功耗PG(AV):0.5W 存储接点温度范围Tstg:-40 to 150℃ 工…...
代码线程安全
线程生命周期 synchronized synchronized会自动释放锁 synchronized同步代码块 synchronized后面括号里obj是锁对象(保证唯一);static修饰的obj对象是自定义MyThread线程类的静态成员变量,该自定义线程类所有实例共享保证锁对象唯一性;另一…...
Filebeat技术栈总结
filebeat 是一个轻量型日志采集器,本质上是一个 agent 。不依赖于任何应用,可以安装在任何节点上,可单独使用 Filebeat 并根据配置读取对应位置的日志进行上报和搜集。 filebeat 内置了常用的 output 组件,例如 kafka、ElasticSe…...
【App自动化测试】(十六)健壮性测试工具——Android Monkey
目录 1. 介绍2. 安装3. Monkey的使用4. money常用命令5. 常用事件类型参数6. Monkey使用参考 1. 介绍 Monkey是一个在模拟器或设备上运行的程序,用于生成用户事件的伪随机流。 为什么要使用Monkey这个自动化遍历工具? Monkey解决了一个测试痛点ÿ…...
实现第一个内核程序的Hello World
背景 在内核的开发中,总要先入个门。那么就要来编写第一个内核程序 入门 一个 module_init 程序是Linux内核模块的一部分,通过module_init 方法就能将程序载入内核。 module_init 方法需要以下步骤 编写module_init 的代码,并将其保存为…...
python基于协同过滤推荐算法的电影观后感推荐管理系统的设计
本课题所设计的影单管理系统,使用B/S架构,Python语言进行开发,它的优点代码不能从浏览器查看,保密性非常好,比其他的影单管理更具安全性。Python还容易修改和调试,毕竟影视是在不断发展过程中,难…...
Vue——状态管理库Pinia
写在前面:本文参考小满大牛的pinia专栏 一、Vuex与Pinia Vuex 和 Pinia 均是 Vue.js 的状态管理库,它们为 Vue 应用程序提供了一种集中式的、可预测的状态管理解决方案。 Vuex 是 Vue.js 官方推荐的状态管理库之一。它的核心概念包括 state、mutation…...
Linux:忘记root密码解决办法
如果你是虚拟机只要将光盘镜像连接到虚拟机上,以光盘iso镜像启动 如果你是真机或服务器那将实体u盘或实体光盘连接至设备并且以连接的设备启动 开机时候打断开机 使用 (u盘|光盘)引导启动 troubleshooting rescue a centos system 输入 1…...
Dockerfile(4) - RUN 指令详解
RUN 运行命令 shell 形式 命令在 shell 中运行Linux 上默认为 /bin/sh -cWindows 上 cmd /S /C RUN <command> exec 形式 RUN ["executable", "param1", "param2"] 必须双引号,不能是单引号 两种写法的实际栗子 RUN …...
一个完整的APP定制开发流程是怎样的?
随着移动互联网的发展,越来越多的 APP应用软件进入人们的生活,让我们的生活更便捷、更舒适。而随着互联网技术的进步,移动互联网应用软件开发行业也越来越成熟,为了适应市场需求,各种功能强大、性能良好的 APP应用软件…...
【数据结构】24王道考研笔记——线性表
线性表 目录 线性表定义和基本操作顺序表静态顺序表动态顺序表 链表单链表不带头结点:带头结点: 双链表循环链表循环单链表:循环双链表: 静态链表 顺序表链表比较逻辑结构:存储结构:基本操作: 定…...
【Linux C】基于树莓派/香橙派的蓝牙服务端——支持多蓝牙设备接入
一、需求 在树莓派/香橙派上利用开发板自带的蓝牙作为一个蓝牙服务端(主机),允许外来设备(从机)通过蓝牙接入进行通信,通信格式为透传方式;采用的编程语言为Linux C 二、环境准备 bluez安装 …...
鸿蒙App开发选择Java还是JavaScript?
众所周知, Java和 JavaScript是两种编程语言,这两种语言在不同的环境中都有许多用途。在鸿蒙 App开发中, Java和 JavaScript是两种常见的编程语言,它们都具有广泛的应用,并且都有其独特的优势。下面我们将就这两种编程…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...




