全面了解Java连接MySQL的基础知识,快速实现数据交互

news2024/11/23 17:06:10

全面了解Java连接MySQL的基础知识,快速实现数据交互

  • 1. 数据库的重要性
  • 2. MySQL数据库简介
    • 2.1 MySQL数据库的基本概念
    • 2.2 MySQL的基本组成部分包括服务器、客户端和存储引擎。
    • 2.3 安装MySQL数据库
      • 2.3.1安装MySQL数据库
      • 2.3.2 下载MySQL安装程序
      • 2.3.3 运行MySQL安装程序
      • 2.3.4 配置MySQL服务
    • 2.4 如何创建新的数据库和表
      • 2.4.1 启动MySQL Workbench:
      • 2.4.2 创建新的数据库:
      • 2.4.3 创建新的数据模型
      • 2.4.4 设计数据库结构
  • 3. Java JDBC API
  • 4. 连接MySQL数据库
  • 5. 执行SQL语句
  • 6. 处理结果集
  • 7. 异常处理
  • 8. 总结与展望

在这里插入图片描述

1. 数据库的重要性

当今互联网时代,大量的应用程序都需要使用MySQL数据库来存储和处理数据。Java作为一种广泛使用的编程语言之一,在开发Web应用程序时经常需要连接MySQL数据库进行数据操作。

因此,了解如何使用Java连接MySQL数据库是非常重要的。在本文中,我们将介绍Java JDBC API以及如何使用该API连接到MySQL数据库、执行SQL语句和处理结果集。理解这些基础知识可以帮助开发人员更好地操作数据库,提高代码的效率和可靠性,实现数据持久化和业务逻辑的分离等目标,从而使得Java应用程序更加健壮、安全和高效。

2. MySQL数据库简介

简单介绍MySQL数据库的基本概念、安装步骤以及如何创建新的数据库和表。

2.1 MySQL数据库的基本概念

MySQL是目前最流行的关系型数据库管理系统(RDBMS),由于其稳定性、可靠性和高性能而被广泛应用于Web开发中。MySQL使用SQL(Structured Query Language)查询语言进行数据操作,支持多种操作系统、编程语言和网络协议。

2.2 MySQL的基本组成部分包括服务器、客户端和存储引擎。

其中,服务器是MySQL的核心组件,负责处理用户请求、执行SQL语句、管理数据库对象等;客户端则是与服务器通信的界面,提供了交互式命令行工具、图形化数据库管理工具、ODBC/JDBC驱动程序等;存储引擎则是实际存储和检索数据的组件,MySQL支持多种存储引擎,如InnoDB、MyISAM、Memory等。

2.3 安装MySQL数据库

在介绍如何安装MySQL数据库之前,需要注意的是,在安装前请确保您的计算机已经安装了Java Runtime Environment(JRE),因为MySQL Workbench需要依赖JRE才能运行。

下面是MySQL数据库的安装步骤:

2.3.1安装MySQL数据库

1.下载MySQL安装程序:打开MySQL官方网站 https://dev.mysql.com/downloads/mysql/ ,选择下载适合你操作系统的版本。以Windows 10为例,可以选择“Windows (x86, 32-bit), MSI Installer”或者“Windows (x86, 64-bit), MSI Installer”版本。

2.3.2 下载MySQL安装程序

运行安装程序:下载完成后,双击安装程序,按照提示完成MySQL数据库的安装。

2.3.3 运行MySQL安装程序

配置MySQL服务:在安装过程中会出现MySQL Server Configuration Wizard,根据需求进行配置,包括选择MySQL的安装路径、端口号、字符集等。

2.3.4 配置MySQL服务

启动MySQL服务:安装成功后,可以在Windows的服务列表中找到MySQL服务,右键点击启动MySQL服务。

2.4 如何创建新的数据库和表

2.4.1 启动MySQL Workbench:

打开MySQL Workbench客户端,输入用户名和密码登录MySQL服务器。
登录MySQL Workbench

2.4.2 创建新的数据库:

在MySQL Workbench中,可以通过“File” -> “New Model”命令创建新的数据模型,在模型中添加新的数据库对象。

2.4.3 创建新的数据模型

设计数据库结构:在新的数据库中,可以添加表、列和约束等对象,并设置它们的属性和关系。

2.4.4 设计数据库结构

保存和执行:设计完数据库结构后,可以保存模型并生成SQL脚本,然后执行该脚本以创建新的数据库和表。
保存和执行SQL脚本

3. Java JDBC API

Java Database Connectivity(JDBC)是Java平台下的一个标准API,它定义了一组用于连接各种数据库系统、执行SQL语句和处理结果集的接口和类。使用JDBC API,开发人员可以编写能够访问不同数据库系统的应用程序,而无需关注底层不同的数据库细节。

为了使用JDBC API,我们需要在Java程序中导入JDBC相关的包,其中最重要的是java.sql包和javax.sql包。java.sql包提供了核心的JDBC API,如Connection、Statement和ResultSet等接口和类;而javax.sql包则提供了一些额外的JDBC API,如DataSource和ConnectionPoolDataSource等接口和类。

下面是JDBC API的主要功能和优点:

连接数据库

JDBC API提供了Connection接口来表示与数据库的连接,通过DriverManager类可以获取数据库连接。例如,以下是连接MySQL数据库的代码示例:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MySQLConnection {
    public static Connection getConnection() throws SQLException {
        String url = "jdbc:mysql://localhost:3306/mydb";
        String user = "root";
        String password = "mypassword";
        return DriverManager.getConnection(url, user, password);
    }
}

执行SQL语句

JDBC API提供了StatementPreparedStatement接口来执行SQL语句,并返回结果集。例如,以下是执行SELECT查询语句并遍历结果集的代码示例:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SelectExample {
    public static void main(String[] args) {
        try (Connection conn = MySQLConnection.getConnection();
             Statement stmt = conn.createStatement()) {
            String sql = "SELECT id, name, age FROM users";
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                System.out.println(id + "\t" + name + "\t" + age);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
}

处理事务
JDBC API提供了Transaction管理,开发人员可以使用Connection接口中的beginTranaction()、commit()rollback()方法来管理事务。

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class TransactionExample {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement stmt1 = null;
        PreparedStatement stmt2 = null;
        try {
            conn = MySQLConnection.getConnection();
            conn.setAutoCommit(false);

            String sql1 = "UPDATE accounts SET balance = balance - ? WHERE user_id = ?";
            stmt1 = conn.prepareStatement(sql1);
            stmt1.setDouble(1, 100.0);
            stmt1.setInt(2, 1);
            stmt1.executeUpdate();

            String sql2 = "UPDATE accounts SET balance = balance + ? WHERE user_id = ?";
            stmt2 = conn.prepareStatement(sql2);
            stmt2.setDouble(1, 100.0);
            stmt2.setInt(2, 2);
            stmt2.executeUpdate();

            conn.commit();
        } catch (SQLException ex) {
            if (conn != null) {
                try {
                    conn.rollback();
                } catch (SQLException ex2) {
                    ex2.printStackTrace();
                }
            }
            ex.printStackTrace();
        } finally {
            try {
                if (stmt1 != null) stmt1.close();
                if (stmt2 != null) stmt2.close();
                if (conn != null) conn.close();
            } catch (SQLException ex) {
                ex.printStackTrace();

4. 连接MySQL数据库

步骤 1:下载和安装MySQL驱动程序
首先,您需要下载并安装 MySQL Connector/J 驱动程序。您可以从官方网站 https://dev.mysql.com/downloads/connector/j/ 下载最新版本的MySQL Connector/J。

将下载的 jar 文件复制到项目目录或者添加到类路径中,以便 Java 程序可以访问它。

注意:如果您使用的是 Maven 或 Gradle,您可以通过添加以下依赖项来自动下载 MySQL Connector/J 驱动程序:

<!-- For Maven -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.23</version>
</dependency>

// For Gradle
implementation 'mysql:mysql-connector-java:8.0.23'

步骤 2:创建数据库连接对象

接下来,在您的 Java 代码中创建一个 Connection 对象,该对象表示与 MySQL 数据库的连接。要创建一个 Connection 对象,请按照以下步骤操作:

import java.sql.*;

public class Main {
    public static void main(String[] args) {
        // MySQL数据库的JDBC URL
        String url = "jdbc:mysql://localhost:3306/mydatabase?useSSL=false";
        // MySQL数据库时的用户名和密码
        String user = "root";
        String password = "password";

        try {
            // 加载MySQL JDBC驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 创建数据库连接对象
            Connection conn = DriverManager.getConnection(url, user, password);
            // 执行操作,如查询数据或插入数据等
            // ...
            // 关闭数据库连接
            conn.close();
        } catch (ClassNotFoundException e) {
            System.out.println("请检查 MySQL JDBC 驱动程序是否添加到类路径中");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("无法连接到 MySQL 数据库,请检查 URL、用户名和密码是否正确");
            e.printStackTrace();
        }
    }
}

上面的代码中,我们首先定义了 MySQL 数据库的 JDBC URL、用户名和密码,然后加载 MySQL JDBC 驱动程序并创建一个 Connection 对象。最后,我们可以在连接上执行 SQL 操作,然后关闭连接。

在执行上述代码时,您需要将 URL、用户名和密码替换为实际的值,并根据需要更改 MySQL JDBC 驱动程序的版本号。

5. 执行SQL语句

如何使用Java程序执行SQL语句,包括创建StatementPreparedStatement对象以及调用其方法来执行SQL查询和更新操作?

步骤 1:创建 Statement 对象

要执行 SQL 语句,您需要创建一个 Statement 对象。您可以通过以下代码创建一个 Statement 对象:

import java.sql.*;

public class Main {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase?useSSL=false";
        String user = "root";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement()) {

            // 执行 SQL 查询
            String sql = "SELECT * FROM employees";
            ResultSet rs = stmt.executeQuery(sql);

            // 处理结果集
            // ...

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们首先创建了一个 Connection 对象和一个 Statement 对象,然后使用 executeQuery() 方法执行 SQL 查询并将结果存储在 ResultSet 对象中。

步骤 2:创建 PreparedStatement 对象
如果您希望执行动态 SQL 语句(即 SQL 语句包含变量),则可以使用 PreparedStatement 对象。您可以通过以下代码创建一个 PreparedStatement 对象:

import java.sql.*;

public class Main {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase?useSSL=false";
        String user = "root";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, user, password);
             PreparedStatement pstmt = conn.prepareStatement("INSERT INTO employees (name, dob, salary) VALUES (?, ?, ?)")) {

            // 设置参数
            pstmt.setString(1, "Alice");
            pstmt.setDate(2, Date.valueOf("1990-01-01"));
            pstmt.setDouble(3, 50000);

            // 执行 SQL 更新操作
            int rows = pstmt.executeUpdate();
            System.out.println(rows + " row(s) affected");

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们首先创建了一个 Connection 对象和一个 PreparedStatement 对象,然后使用 setXXX() 方法设置每个参数的值。最后,我们使用 executeUpdate() 方法执行 SQL 更新操作并打印受影响的行数。

6. 处理结果集

讲解如何处理SQL查询语句返回的结果集,包括如何使用ResultSet对象获取查询结果和关闭资源?

下面是处理 SQL 查询语句返回的结果集的步骤:

步骤 1:执行查询并获得结果集
要执行 SQL 查询并获取结果集,您需要使用 StatementPreparedStatement 对象。您可以通过调用 executeQuery() 方法来执行 SQL 查询,并将结果存储在一个名为 ResultSet 的对象中。

import java.sql.*;

public class Main {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase?useSSL=false";
        String user = "root";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT * FROM employees")) {

            // 循环遍历结果集
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                Date dob = rs.getDate("dob");
                double salary = rs.getDouble("salary");

                // 打印结果
                System.out.println(id + ", " + name + ", " + dob + ", " + salary);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们首先创建了一个 Connection 对象和一个 Statement 对象,然后使用 executeQuery() 方法执行 SQL 查询并将结果存储在 ResultSet 对象中。接下来,我们使用 next() 方法循环遍历结果集,并使用 getInt()、getString()、getDate() 和 getDouble() 等方法获取每个列的值。最后,我们关闭所有资源,包括 ResultSet、Statement 和 Connection 对象。

步骤 2:关闭资源
当您完成对结果集的操作后,应该及时关闭所有资源以释放数据库连接和其他资源。您可以使用以下代码来关闭 ResultSet、Statement 和 Connection 对象:

try {
    // 关闭 ResultSet 对象
    if (rs != null) {
        rs.close();
    }
    // 关闭 Statement 对象
    if (stmt != null) {
        stmt.close();
    }
    // 关闭 Connection 对象
    if (conn != null) {
        conn.close();
    }
} catch (SQLException e) {
    e.printStackTrace();
}

在上面的代码中,我们首先检查每个对象是否为 null,然后调用 close() 方法关闭它们。注意,这里使用了 try-with-resource 语句,这样无需手动关闭资源,Java 会在代码块结束后自动关闭这些资源。

7. 异常处理

在连接数据库时,可能会出现以下异常:

1.ClassNotFoundException:当无法找到 MySQL JDBC 驱动程序时引发。

2.SQLException:这是最常见的异常类型。它表示与数据库建立连接或执行 SQL 查询和更新操作时发生的错误。具体而言,SQLException 可能包括以下子类:

  • SQLSyntaxErrorException:当 SQL 语句包含语法错误时引发。

  • DataTruncationException:当试图将大于列大小的数据插入数据库时引发。

  • BatchUpdateException:当执行批处理操作时引发。

  • SQLTransientException:当在数据库连接上发生瞬态错误(例如网络故障)时引发。

要捕获这些异常并进行处理,您可以使用 try-catch 块。在 catch 块中,您可以记录异常详细信息、回滚事务、关闭资源等。

例如:

import java.sql.*;

public class Main {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase?useSSL=false";
        String user = "root";
        String password = "password";

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            // 创建数据库连接对象
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);

            // 执行 SQL 查询操作
            stmt = conn.createStatement();
            rs = stmt.executeQuery("SELECT * FROM employees");

            // 处理结果集
            while (rs.next()) {
                // ...
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                // 关闭结果集
                if (rs != null) rs.close();
                // 关闭语句对象
                if (stmt != null) stmt.close();
                // 关闭连接对象
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

在上面的代码中,我们使用了三个变量来存储 ConnectionStatementResultSet 对象。在 try 块中,我们可以执行 SQL 操作,并在 catch 块中处理可能出现的异常。最后,在 finally 块中,我们关闭所有资源。

注意,在关闭资源时,应按照以下顺序关闭它们:ResultSet、Statement 和 Connection。

8. 总结与展望

本文介绍了 Java 连接 MySQL 数据库的基础知识,涵盖了以下主题:

1.下载和安装 MySQL Connector/J 驱动程序;
2.创建 Connection 对象以连接数据库;
3.使用 Statement 和 PreparedStatement 对象执行 SQL 查询和更新操作;
4.处理 SQL 查询语句返回的结果集;
5.捕获和处理可能出现的异常;
6.释放资源。

通过学习本文,您可以了解到如何使用 Java 程序连接 MySQL 数据库,并执行查询和更新操作。同时,由于 Java 连接数据库是一个相对复杂的过程,您也应该深入研究 JDBC 的更高级特性,例如批量更新、事务处理和数据源管理等。

在掌握了基础知识之后,您可以尝试将这些技术应用于实际项目中。在实践过程中,您可能会遇到一些与连接数据库相关的问题,例如性能问题、并发访问问题和数据完整性问题等。因此,您还需要了解更多有关 MySQL 数据库和 JDBC 的高级知识,以便更好地处理这些问题。

最后,我建议您思考以下几个问题:

  • 如何优化数据库连接性能?
  • 如何保护数据库免受 SQL 注入攻击?
  • 如何使用 JDBC 执行事务和批量更新?
  • 如何处理并发访问和数据完整性问题?
  • 如何管理数据库连接池和数据源?

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

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

相关文章

API接口|了解API接口测试|API接口测试指南

part1.什么是API接口 API接口是指应用程序接口&#xff08;Application Programming Interface&#xff09;&#xff0c;它是一组定义、控制和描述软件程序中不同组件之间交互的方式和规则。 API接口允许不同的软件系统之间进行信息共享和相互访问&#xff0c;而无需了解在其…

QT6之QTimeZone

一、简介 QTimeZone 标识时间表示与 UTC 的关系&#xff0c;也可以表示 UTC、本地时间和与 UTC 的固定偏移量。 QTimeZone&#xff08;自 Qt 6.5 起&#xff09;统一了它们与一般时间系统的表示&#xff0c;大多数操作系统普遍支持的一个时区被指定为本地时间。 总结&#x…

bim精装修常用软件【建模助手】有什么功能?

大家好&#xff0c;这里是BIM建模助手。 今天有个重磅消息要告诉大家&#xff0c;那就是BIM建模助手的【精装模块】上线啦&#xff01; 为了辅助BIMer快速设计出精装修的房屋效果&#xff0c;我们开发了【精装模块】&#xff0c;无论是装饰面层、铺排瓷砖、布置吊顶、统计出量…

chatgpt赋能Python-python_kazoo

Python Kazoo: 优质的分布式应用程序开发工具 什么是Python Kazoo&#xff1f; Python Kazoo是一个Python库&#xff0c;它提供了高级别的API&#xff0c;使得分布式应用程序的开发更加容易。Kazoo是基于Zookeeper实现的&#xff0c;它是一个分布式系统协调器&#xff0c;为分…

力扣sql中等篇练习(二十六)

力扣sql中等篇练习(二十六) 1 世界排名的变化 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # 分别求出变化前后的排名 然后再进行内连接即可 # row_number()里面也可以用多个字段加减的表达式去进行…

【C++】类和对象(3)

文章目录 一、初始化列表二、explicit关键字三、static成员四、友元4.1 友元函数4.2 友元类 五、内部类六、匿名对象七、编译器的优化 一、初始化列表 首先我们先回顾一下构造函数&#xff0c;对象的初始化由构造函数来完成&#xff0c;我们可以在构造函数的函数体内对对象的成…

00后卷王,把我们这些老油条卷的辞职信都写好了........

现在的小年轻真的卷得过分了。 前段时间我们公司来了个00年的&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天&#xff0c;原来这位小老弟家…

一个简单的c程序

有些基础知识点如果不经常温故可能就会忘记&#xff0c;难道是因为我已经老了吗&#xff1f;人要是老了&#xff0c;脑子是真的不好用了啊。今天看一个很简单的c代码&#xff1a; #include <stdio.h> #include <stdlib.h>typedef int eint32; typedef unsigned in…

基于数据库实现乐观锁

基于数据库实现乐观锁 一 乐观锁与悲观锁介绍二 乐观锁实践案例2.1 库存超卖问题复现2.1.1 模拟秒杀下单分析2.1.2秒杀代码2.1.3单元测试结果 2.2 库存超卖问题分析2.3 乐观锁解决超卖问题2.3.1版本号方式 案例源码案例中sql脚本 一 乐观锁与悲观锁介绍 悲观锁&#xff1a; 悲…

Java的文件操作和IO

目录 一、认识文件 树型结构组织 和 目录 文件路径&#xff08;Path&#xff09; 其他知识 二、Java 中操作文件 File 概述 属性 构造方法 文件内容的读写 —— 数据流 InputStream 概述 FileInputStream 概述 构造方法 代码示例 利用 Scanner 进行字符读取 Out…

Puppeteer 部署 - Docker容器 - Idea一键部署

Puppeteer 代码注意 部署到服务器&#xff0c;报错 Running as root without --no-sandbox is not supported.解决方案&#xff1a; const browser await puppeteer.launch({args: [--no-sandbox],env: {DISPLAY: ":10.0"}});Dockerfile 编写Dockerfile根据自己…

前后端交互 | 传递参数的方式

目录 GET请求两种方式 第一种&#xff1a;&#xff1f;& 形式 第二种:不使用&#xff1f;或者引号进行 传递参数 POST请求 小结&#xff1a; get和post的使用情况 传参数重复 传参数&#xff1a;目前共有三种传递参数的方式 GET请求两种方式 第一种&#xff1a;&…

史上最全BI知识全解,万字长文带你读懂BI

在各种新趋势的影响下&#xff0c;数字化不仅在当下有着强大的实力以及巨大的潜力&#xff0c;更是成为了未来世界的标志&#xff0c;成为了社会各界对未来发展的共识。企业为了执行数字化战略&#xff0c;实行数字化转型&#xff0c;实现数据价值&#xff0c;除了需要相关数字…

cpp综合项目—机房预约系统

目录 1、机房预约系统需求 1.1、 身份简介 1.2、机房简介 1.3、申请简介 1.4、 系统具体需求 2、创建项目 3、创建主菜单 3.1 菜单实现 3.2、接口实现 4、退出功能实现 4.1、退出功能实现 4.2、测试退出 5、创建身份类 5.1、身份的基类 5.2、学生类 5.3、老师类…

windows重装后恢复谷歌浏览器数据(旧的用户数据仍存在user data)

背景及注意前提&#xff01;&#xff01;&#xff01; 首先基于我笔记本被公司电脑加域之后&#xff0c;原先家庭版还被升级成了专业版&#xff0c;但是旧的user用户数据还都存在。只是变成了两个用户&#xff0c;开机默认是加域后的用户。 如果你的C盘已经完全被重写了&…

shell计算天数差和月份差

计算月份差 monthdiff.sh function getMonthDiff() { date1${1//-/} date1_year${date1:0:4} date1_month${date1:4:2} date2${2//-/} date2_year${date2:0:4} date2_month${date2:4:2} diff$(((date1_year-date2_year)*12 (date1_month-date2_m…

目前国内有哪些开源的非 SaaS 团队协作平台、项目管理工具呢?

以下是一些常用的开源团队协作平台和项目管理工具&#xff1a; 1.Gitea Gitea 是一个轻量级的 Git 服务&#xff0c;它提供了一个基于 Web 的界面&#xff0c;以方便地管理 Git 存储库。Gitea 也是一个自托管的 Git 服务&#xff0c;可以轻松地在本地或云环境中部署。 2.GitL…

详细分析置换算法

对于操作系统而言&#xff0c;虚拟空间是非常大的&#xff0c;我们往往无法直接将如此大的空间装入内存&#xff0c;而即使我们采用多级页表与段页式存储即使&#xff0c;也仅仅只是节省了页表的大小&#xff0c;如此将如何多的物理页装进内存仍然是一个问题&#xff0c;为此科…

【2023年4月美赛加赛】Z题:The future of Olympics 25页完整论文

【2023年4月美赛加赛】Z题&#xff1a;The future of Olympics 25页完整论文 1 题目 背景 国际奥委会(IOC)正面临着夏季奥运会和冬季奥运会申办数量的减少**[1]**。在过去&#xff0c;举办奥运会的竞争非常激烈&#xff0c;声望也很高。然而&#xff0c;最近&#xff0c;主办…

MySQL基础篇——MySQL数据库 表的操作,

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.表操作 1.表操作-查询创建 1&#xff09;查询当前数据库所有表 2). 查看…