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

Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

  • 前言
  • 一、JDBC 核心接口和类:数据库连接的“工具箱”
    • 1. 常用的 2 个“关键类”
    • 2. 必须掌握的 5 个“核心接口”
  • 二、创建 JDBC 程序的步骤
    • 1. 第一步:加载数据库驱动
    • 2. 第二步:定义数据库连接地址
    • 3. 第三步:建立连接
    • 4. 第四步:创建 Statement
    • 5. 第五步:执行 SQL 查询
    • 6. 第六步:处理结果集
    • 7. 第七步:关闭资源
    • 完整代码示例
  • 三、实际操作教程
    • 第一步、导入数据库maven
    • 第二步、创建并导入web库
    • 第三步、连接本地数据库的java代码
    • 第四步、创建数据库
    • 第五步、在JSP代码中获取session
    • 第六步、编译运行环境
  • 三、本文所有代码
    • User类
    • UserListServlet类
    • DBConnection类
    • pom.xml文件
    • user.jsp文件


前言

  • 在前序的 JSP 基础教程中,我们已经掌握了动态页面的核心语法、请求响应处理及基础标签的使用方法,初步构建了基于 JSP 的 Web 开发认知
  • 但在实际项目中,动态页面的价值往往需要与数据库结合才能充分释放 ——如何让 JSP 页面 “活” 起来?关键在于让页面能够动态读取并展示数据库中的实时数据。

本次实战教程将聚焦 “数据可视化展示” 这一核心场景,带领读者打通 “IDEA 开发环境→MySQL 数据库→JSP 页面” 的完整技术链路

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的JSP知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12950980.html?spm=1001.2014.3001.5482


一、JDBC 核心接口和类:数据库连接的“工具箱”

JDBC(Java Database Connectivity)是一套让 Java 程序能够连接和操作数据库的工具,就像一个“工具箱”。你用它来和数据库打交道,就像用钥匙开门一样。

1. 常用的 2 个“关键类”

这两个类就像是“工具箱”里的“常用工具”:

  • DriverManager:这个类的作用是帮助我们建立数据库连接。它就像是一个“中介”,帮你找到合适的钥匙(驱动程序)来打开数据库的门。
  • Connection:这个类代表了和数据库的连接。一旦连接建立,你就可以通过它和数据库进行通信,比如发送指令(SQL 语句)。

2. 必须掌握的 5 个“核心接口”

接口可以理解为一种“规范”,规定了某些功能的实现方式。这 5 个接口是 JDBC 的核心:

  • Driver:定义了数据库驱动程序需要实现的功能,比如如何连接到数据库。
  • Connection:表示和数据库的连接,你可以通过它发送 SQL 语句和接收结果。
  • Statement:用来执行 SQL 语句的接口。你可以通过它发送查询或更新数据库的指令。
  • ResultSet:用来接收查询结果的接口。当你执行查询操作后,结果会以表格的形式存储在这个对象里。
  • PreparedStatement:这是一个特殊的 Statement,可以预编译 SQL 语句,提高执行效率,还可以防止 SQL 注入攻击。

二、创建 JDBC 程序的步骤

创建一个 JDBC 程序,就像按照步骤组装一个玩具。以下是详细的步骤:

1. 第一步:加载数据库驱动

这一步就像是告诉 Java 程序,你准备用哪种“钥匙”去开门。你需要加载数据库驱动程序,让 Java 知道如何连接到数据库。
代码示例:

Class.forName("com.mysql.cj.jdbc.Driver");

这里 com.mysql.cj.jdbc.Driver 是 MySQL 数据库驱动的类名。

2. 第二步:定义数据库连接地址

这一步是告诉 Java 程序,数据库在哪里。连接地址包括数据库的类型、服务器地址、数据库名称等信息。
例如:

String url = "jdbc:mysql://localhost:3306/mydatabase";

这里 jdbc:mysql:// 表示使用 MySQL 数据库,localhost:3306 是数据库服务器的地址和端口,mydatabase 是数据库名称。

3. 第三步:建立连接

这一步是用 DriverManager 类,根据前面定义的连接地址和用户名、密码,建立和数据库的连接。
代码示例:

Connection conn = DriverManager.getConnection(url, "username", "password");

这里 usernamepassword 是登录数据库的用户名和密码。

4. 第四步:创建 Statement

这一步是创建一个 Statement 对象,用来执行 SQL 语句。
代码示例:

Statement stmt = conn.createStatement();

5. 第五步:执行 SQL 查询

这一步是通过 Statement 对象发送 SQL 语句到数据库。例如,查询数据库中的数据:

String sql = "SELECT * FROM mytable";
ResultSet rs = stmt.executeQuery(sql);

这里 mytable 是表名,SELECT * FROM mytable 是 SQL 查询语句。

6. 第六步:处理结果集

这一步是处理返回的结果集(ResultSet)。你可以通过循环遍历结果集,获取每一行的数据。
代码示例:

while (rs.next()) {String column1 = rs.getString("column1");int column2 = rs.getInt("column2");System.out.println(column1 + ", " + column2);
}

这里 column1column2 是表中的列名。

7. 第七步:关闭资源

这一步非常重要,是为了释放数据库连接和资源,避免浪费。
代码示例:

rs.close();
stmt.close();
conn.close();

完整代码示例

以下是一个完整的 JDBC 程序示例,结合了上述所有步骤:

import java.sql.*;public class JdbcExample {public static void main(String[] args) {try {// 第一步:加载数据库驱动Class.forName("com.mysql.cj.jdbc.Driver");// 第二步:定义数据库连接地址String url = "jdbc:mysql://localhost:3306/mydatabase";String user = "username";String password = "password";// 第三步:建立连接Connection conn = DriverManager.getConnection(url, user, password);// 第四步:创建StatementStatement stmt = conn.createStatement();// 第五步:执行SQL查询String sql = "SELECT * FROM mytable";ResultSet rs = stmt.executeQuery(sql);// 第六步:处理结果集while (rs.next()) {String column1 = rs.getString("column1");int column2 = rs.getInt("column2");System.out.println(column1 + ", " + column2);}// 第七步:关闭资源rs.close();stmt.close();conn.close();} catch (ClassNotFoundException e) {System.out.println("数据库驱动未找到!");e.printStackTrace();} catch (SQLException e) {System.out.println("数据库连接或操作失败!");e.printStackTrace();}}
}

下面我们来实际操作一下

三、实际操作教程

题目要求

  • 使用 IntelliJ IDEA 开发环境,通过 JDBC 连接关系型数据库(如 MySQL),查询指定表中的数据,并将数据以结构化形式(如表格)动态渲染到 JSP 页面的用户界面中,实现数据的可视化展示

第一步、导入数据库maven

  • 首先我们需要配置好自己的maven环境
  • maven环境必须是全英文,不然运行不了

我的jsp环境搭建博客https://blog.csdn.net/2402_83322742/article/details/146980845?spm=1001.2014.3001.5501

在这里插入图片描述

  • 接着需要在maven的网站里找到数据库jdbc的依赖项
    这里我直接将jdbc的依赖项放出来
  • maven官方网站https://maven.apache.org/
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency>
  • 同时我们还需要导入jsp-api依赖项和javax.servlet-api依赖项
 <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.3</version><scope>provided</scope>
</dependency>
  • 最后由于需要用到jstl,我们需要加入jstl和taglibs的依赖项
<!-- jstl表达式依赖--><dependency><groupId>javax.servlet.jsp.jstl</groupId><artifactId>jstl-api</artifactId><version>1.2</version></dependency>
<!-- taglibs 标签库依赖--><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency>
  • 导入之后的样子

在这里插入图片描述

  • 配置好外部库
    在这里插入图片描述

  • 然后单击我们的SE1,新建一个模板
    在这里插入图片描述

第二步、创建并导入web库

  • 我们新建了一个MySQLtest的模块,在里面单击右键,打开模板设置
    在这里插入图片描述
  • 在MySQLtest里面添加web文件
    在这里插入图片描述
    在这里插入图片描述
  • 然后在工件里,找到web应用程序展开型,找到我们刚刚添加的MySQLweb文件
    在这里插入图片描述
  • 在web-INF文件里创建一个lib文件,并导入我们的库文件
    在这里插入图片描述
    在这里插入图片描述

第三步、连接本地数据库的java代码

  • 首先新建三个java类UserListServlet,User,DBConnection
    在这里插入图片描述
    在这里插入图片描述
  • 接着在java类里面添加以下代码

user类

package org.example;// 表示用户信息的实体类
public class User {private int id; // 用户IDprivate String username; // 用户名private String email; // 用户邮箱private String phone; // 用户电话private String role; // 用户角色private String createTime; // 用户创建时间// 构造函数,参数顺序和类型要与查询结果列对应public User(int id, String username, String email, String phone, String role, String createTime) {this.id = id;this.username = username;this.email = email;this.phone = phone;this.role = role;this.createTime = createTime;}// 获取用户IDpublic int getId() { return id; }// 获取用户名public String getUsername() { return username; }// 获取用户邮箱public String getEmail() { return email; }// 获取用户电话public String getPhone() { return phone; }// 获取用户角色public String getRole() { return role; }// 获取用户创建时间public String getCreateTime() { return createTime; }
}

UserListServlet类

package org.example;import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;// 处理用户列表请求的 Servlet
@WebServlet("/UserListServlet")
public class UserListServlet extends HttpServlet {// 处理 GET 请求protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {List<User> userList = new ArrayList<>();String sql = "SELECT id, user_name, email, phone, role, create_time FROM users";// 从数据库查询用户信息try (Connection conn = DBConnection.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql);ResultSet rs = pstmt.executeQuery()) {while (rs.next()) {int id = rs.getInt("id");String userName = rs.getString("user_name");String email = rs.getString("email");String phone = rs.getString("phone");String role = rs.getString("role");String createTime = rs.getString("create_time");User user = new User(id, userName, email, phone, role, createTime);userList.add(user);}} catch (SQLException e) {// 发生数据库操作异常时,向客户端发送错误响应response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);response.getWriter().println("Database error occurred. Please try again later.");return;}// 将用户列表存入会话HttpSession requestSession = request.getSession(true);requestSession.setAttribute("userList", userList);// 转发请求到 JSP 页面request.getRequestDispatcher("user.jsp").forward(request, response);}
}    

第四步、创建数据库

  • 完成上面的代码之后,我们接着创建一个数据库,点击数据库按钮
    在这里插入图片描述

  • 然后找到加号,点击数据源,找到MySQL
    在这里插入图片描述

  • 在里面输入我们的密码和用户名
    在这里插入图片描述

  • 找到部署架构,里面就有我们的数据库文件
    在这里插入图片描述
    在这里插入图片描述

  • 连接数据库的代码名字要求与我们的数据库匹配一致,这里我连接了2023se3
    在这里插入图片描述

  • SQL查询语句要查询具体的表文件,这里我查询了user文件
    在这里插入图片描述

  • 然后点击运行按钮,如果在终端显示数据库连接成功,则代表环境搭建成功
    在这里插入图片描述

  • 然后构建我们的数据库
    在这里插入图片描述

第五步、在JSP代码中获取session

  • 接下来我们准备好我们的jsp文件
    在这里插入图片描述
  • 然后在jsp文件添加以下代码
<tbody><c:forEach items="${sessionScope.userList}" var="user"><tr><td class="center">${user.id}</td><td>${user.username}</td><td>${user.email}</td><td>${user.phone}</td><td class="center">${user.role}</td><td class="center">${user.createTime}</td><td class="center"><a name="remove" onclick="Common.confirm('确认要屏蔽吗?')"><i class="glyphicon glyphicon-remove"></i>屏蔽</a></td></tr></c:forEach>
</tbody>
  • 然后在jsp文件开头加入以下文件获取我们userlistservletsession获得的数据库的值
<li><a href="/UserListServlet"><span class="glyphicon glyphicon-user"></span>&nbsp;&nbsp;用户管理</a></li>

第六步、编译运行环境

  • 找到最上面的编辑配置
    在这里插入图片描述
    在里面配置好Tomcat服务器

在这里插入图片描述
在这里插入图片描述

  • 启动环境
    在这里插入图片描述
  • 然后点击用户管理刷新页面

在这里插入图片描述

  • 这样我们的数据库的信息便打印到屏幕上了

三、本文所有代码

User类

package org.example;
public class User {private int id;private String username;private String email;private String phone;private String role;private String createTime;// 构造函数参数顺序、类型必须与查询结果列顺序、类型一致public User(int id, String username, String email, String phone, String role, String createTime) {this.id = id;this.username = username;this.email = email;this.phone = phone;this.role = role;this.createTime = createTime;}// 确保所有属性都有对应的 getter 方法public int getId() { return id; }public String getUsername() { return username; }public String getEmail() { return email; }public String getPhone() { return phone; }public String getRole() { return role; }public String getCreateTime() { return createTime; }
}

UserListServlet类

package org.example;import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;// 处理用户列表请求的 Servlet
@WebServlet("/UserListServlet")
public class UserListServlet extends HttpServlet {// 处理 GET 请求protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {List<User> userList = new ArrayList<>();String sql = "SELECT id, user_name, email, phone, role, create_time FROM users";// 从数据库查询用户信息try (Connection conn = DBConnection.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql);ResultSet rs = pstmt.executeQuery()) {while (rs.next()) {int id = rs.getInt("id");String userName = rs.getString("user_name");String email = rs.getString("email");String phone = rs.getString("phone");String role = rs.getString("role");String createTime = rs.getString("create_time");User user = new User(id, userName, email, phone, role, createTime);userList.add(user);}} catch (SQLException e) {// 发生数据库操作异常时,向客户端发送错误响应response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);response.getWriter().println("Database error occurred. Please try again later.");return;}// 将用户列表存入会话HttpSession requestSession = request.getSession(true);requestSession.setAttribute("userList", userList);// 转发请求到 JSP 页面request.getRequestDispatcher("user.jsp").forward(request, response);}
}

DBConnection类

package org.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class DBConnection {private static final String URL = "jdbc:mysql://localhost:3306/2023se3";private static final String USER = "root";private static final String PASSWORD = "123456";public static Connection getConnection() {try {Class.forName("com.mysql.cj.jdbc.Driver");Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);System.out.println("数据库连接成功");return conn;} catch (ClassNotFoundException | SQLException e) {throw new RuntimeException("数据库连接失败", e);}}public static void main(String[] args) {DBConnection.getConnection();}
}

pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>SE1</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>MySQLtest</module></modules><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.3</version><scope>provided</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><!-- jstl表达式依赖--><dependency><groupId>javax.servlet.jsp.jstl</groupId><artifactId>jstl-api</artifactId><version>1.2</version></dependency><!-- taglibs 标签库依赖--><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency></dependencies></project>

user.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1 , user-scalable=no"><title>pha-Admin</title><link rel="stylesheet" href="css/bootstrap.min.css"/><link rel="stylesheet" href="css/bootstrap-maizi.css"/><link rel="stylesheet" href="css/content-style.css"/><link rel="stylesheet" href="css/mricode.pagination.css"/><link rel="stylesheet" href="css/jquery.fancybox.css"/><link rel="stylesheet" href="css/sweetalert.css"/>
</head>
<body>
<!--导航-->
<nav class="navbar navbar-inverse navbar-fixed-top"><div class="container"><!--小屏幕导航按钮和logo--><div class="navbar-header"><button class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a href="index.jsp" class="navbar-brand"> pha-Admin</a></div><!--小屏幕导航按钮和logo--><!--导航--><div class="navbar-collapse collapse"><ul class="nav navbar-nav"><li class="active"><a href=""><span class="glyphicon glyphicon-home"></span>&nbsp;&nbsp;后台首页</a></li><li><a href="/UserListServlet"><span class="glyphicon glyphicon-user"></span>&nbsp;&nbsp;用户管理</a></li><li><a href="machine.jsp"><span class="glyphicon glyphicon-expand"></span>&nbsp;&nbsp;机器管理</a></li><li><a href="service.jsp"><span class="glyphicon glyphicon-tasks"></span>&nbsp;&nbsp;服务管理</a></li><li><a href="log.jsp"><span class="glyphicon glyphicon-list-alt"></span>&nbsp;&nbsp;日志管理</a></li><li><a href="wiki.jsp"><span class="glyphicon glyphicon-book"></span>&nbsp;&nbsp;使用文档</a></li></ul><ul class="nav navbar-nav navbar-right"><li class="dropdown"><a id="dLabel" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><%String username = (String) session.getAttribute("username");if (username != null) {out.print(username);} else {out.print("admin");}%><span class="caret"></span></a><ul class="dropdown-menu" aria-labelledby="dLabel"><li><a href="index.jsp"><span class="glyphicon glyphicon-cog"></span>&nbsp;&nbsp;个人设置</a></li></ul></li><li><a href="#bbs"><span class="glyphicon glyphicon-off"></span>&nbsp;&nbsp;退出</a></li></ul></div><!--导航--></div>
</nav>
<!--导航-->
<div class="container"><div class="row"><div class="col-md-12"><div class="panel-body" style="padding: 15px 0;"><ul class="nav nav-tabs"><li class="active"><a href="user.jsp">用户列表</a></li><li class=""><a href="user_form.jsp">添加用户</a></li></ul></div><div class="panel-body"><div class="row"><form><div class="col-md-3 col-lg-offset-9"><div class="input-group"><input class="form-control" type="text" value="" placeholder="用户名" name="keyword"><span class="input-group-btn"><button type="submit" class="btn btn-primary"><i class="glyphicon glyphicon-search"></i></button></span></div></div></form></div></div><div class="panel panel-default"><div class="table-responsive"><table class="table table-bordered"><thead><tr><th class="w8p">id</th><th class="w18p">用户名</th><th class="w18p">邮箱</th><th class="w13p">手机</th><th class="w10p">角色</th><th class="w15p">创建时间</th><th class="w15p">操作</th></tr></thead><tbody><c:forEach items="${sessionScope.userList}" var="user"><tr><td class="center">${user.id}</td><td>${user.username}</td><td>${user.email}</td><td>${user.phone}</td><td class="center">${user.role}</td><td class="center">${user.createTime}</td><td class="center"><a name="remove" onclick="Common.confirm('确认要屏蔽吗?')"><i class="glyphicon glyphicon-remove"></i>屏蔽</a></td></tr></c:forEach></tbody></table></div><div class="panel-footer"><div class="row"><div class="col-md-8 m-pagination" id="paginator"></div></div></div></div></div></div>
</div>
<!--footer-->
<footer><div class="container"><div class="row"><div class="col-md-12"><p class="text-muted center">Copyright&nbsp;©&nbsp;2017-2018&nbsp;&nbsp;phachon@163.com&nbsp;&nbsp;</p></div></div></div>
</footer>
<!--footer-->
<script src="js/plugins/jquery/jquery.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/plugins/pagination/mricode.pagination.js"></script>
<script src="js/plugins/fancybox/jquery.fancybox.js"></script>
<script src="js/plugins/sweetalert/sweetalert.min.js"></script>
<script src="js/common/common.js"></script>
<script src="js/module/account.js"></script>
<script type="text/javascript">var pageData = [];pageData.push({'pageSize': '10', 'total': '1000', 'pageIndex': '2'});Common.paginator("#paginator", pageData);Account.bindFancyBox();
</script>
</body>
</html>

以上就是这篇博客的全部内容,下一篇我们将继续探索JSP的更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的JSP知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12950980.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

相关文章:

Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互

Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示&#xff0c;实现前后端交互 前言一、JDBC 核心接口和类&#xff1a;数据库连接的“工具箱”1. 常用的 2 个“关键类”2. 必须掌握的 5 个“核心接口” 二、创建 JDBC 程序的步骤1. 第一步&#xf…...

JDBC之ORM思想及SQL注入

目录 一. ORM编程思想 1. 简介 2. 实操ORM思想 a. Students实体类 b. ORM映射 二. SQL注入 1. 简介 2. 解决SQL注入 三. 总结 前言 本文来讲解ORM编程思想和SQL注入&#xff0c;旨在帮助大家更容易的理解和掌握 个人主页&#xff1a;艺杯羹 系列专栏&#xff1a;JDBC …...

UniApp学习笔记

在uniapp中使用View标签来代替div标签&#xff0c;使用rpx来取代px&#xff0c;rpx动态适配屏幕宽度750rpx100vw H5端不支持*的css选择器 body的元素选择器请改为page div和ul和li等改为view、 span和font改为text a改为navigator img改为image scoped:非H5端默认并未启…...

统计术语学习

基期、现期 作为对比参照的时期称为基期&#xff0c;而相对于基期的称为现期。 描述具体数值时我们称之为基期量和现期量。 【例 1】2017 年比 2016 年第三产业 GDP 增长 6.8%&#xff0c; &#xff08;2016&#xff09;为基期&#xff0c;&#xff08;2017&#xff09; 为现…...

认识 Linux 内存构成:Linux 内存调优之页表、TLB、缺页异常、大页认知

写在前面 博文内容涉及 Linux 内存中 多级页表,缺页异常,TLB,以及大页相关基本认知理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是…...

Java File 类的常用方法详解

Java File 类的常用方法详解 File 类是 Java 中用于操作文件和目录的核心类&#xff0c;位于 java.io 包。它提供了丰富的方法来管理文件系统&#xff0c;包括创建、删除、重命名、查询属性、遍历目录等操作。 1. 构造方法 File 类提供多种构造方法&#xff0c;用于创建文件或…...

【AIGC】基础篇:VS Code 配置 Python 命令行参数调试debug超详细教程

文章目录 前言一、安装必要的扩展二、安装 debugpy三、创建 launch.json 配置文件四、配置调试环境五、开始调试六、命令行调试七、远程调试八、调试技巧九、常见问题及解决方法 前言 在 Python 开发过程中&#xff0c;调试是必不可少的环节。VS Code 提供了强大的调试功能&am…...

【金仓数据库征文】金仓数据库KingbaseES:千行百业国产化征程中的璀璨之星

&#x1f381;个人主页&#xff1a;User_芊芊君子 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f50d;系列专栏&#xff1a;AI 【引言】 在数字化转型浪潮奔涌向前的时代&#xff0c;数据库作为数据存储与管理的核心枢纽&#xff0c;其重要性不…...

Linux进程学习【基本认知】

&#x1f33c;&#x1f33c;前言&#xff1a;前言理解冯诺依曼体系结构与操作系统原理 在计算机科学的基础理论中&#xff0c;冯诺依曼体系结构和操作系统是两个关键概念&#xff0c;它们共同构成了现代计算机的运行基础。本文将从这两个方面入手&#xff0c;简要讲解它们的基本…...

电子工厂POE交换机端口数量选择与部署策略

引言 在电子工厂的智能化升级过程中&#xff0c;POE&#xff08;Power over Ethernet&#xff09;交换机凭借其“供电数据传输”一体化功能&#xff0c;成为构建工业物联网的核心设备。与传统工业交换机相比&#xff0c;POE交换机通过单根网线实现设备供电与数据交互&#xff…...

Codeforces Round 1020 (Div. 3) A-D

A. Dr. TC https://codeforces.com/contest/2106/problem/A 题目大意&#xff1a; 对输入字符串每个位置字符依次翻转&#xff08;1->0 , 0->1) 比如: 101 001 翻转位置1 111 2 100 3 题解&#xff1a; 观察数学特征&#xff1a;ansn…...

电子病历高质量语料库构建方法与架构项目(提示词设计篇)

电子病历人工智能提示词工程是医疗AI应用中的关键技术环节,它直接影响大语言模型在医疗场景下的输出质量和可靠性。随着大语言模型在电子病历生成、质控、数据提取等领域的广泛应用,如何通过编程实现高效、精准的提示词工程成为医疗信息化建设的重要课题。本文将系统介绍电子…...

蓝桥杯 4. 卡片换位

卡片换位 原题目链接 题目描述 你玩过华容道的游戏吗&#xff1f; 这是一个类似的&#xff0c;但更简单的游戏。 看下面的 3 2 格子&#xff1a; --------- | A | * | * | --------- | B | | * | ---------在其中放置了 5 张牌&#xff0c;其中&#xff1a; A 表示关…...

用python进行OCR识别

原文链接&#xff1a;https://www.bilibili.com/opus/1036675560501149699 我担心原作者删除&#xff0c;所以重新拷贝了一遍 1.下载tesseract 链接&#xff1a;https://github.com/UB-Mannheim/tesseract/wiki 这里示例安装最新版本 点击下载tesseract安装包 2.安装tess…...

【大语言模型】大语言模型(LLMs)在工业缺陷检测领域的应用

大语言模型&#xff08;LLMs&#xff09;在工业缺陷检测领域的应用场景正在快速扩展&#xff0c;结合其多模态理解、文本生成和逻辑推理能力&#xff0c;为传统检测方法提供了新的技术路径。以下是该领域的主要应用场景及相关技术进展&#xff1a; 1. 多模态缺陷检测与解释 视…...

202531读书笔记|《天上大风:良宽俳句·短歌·汉诗400》——我别无他物款待君,除了山中冬日寂寥,陶然共一醉,不知是与非,一饱百情足,一酣万事休

202531读书笔记|《天上大风&#xff1a;良宽俳句短歌汉诗400》——我别无他物款待君&#xff0c;除了山中冬日寂寥&#xff0c;陶然共一醉&#xff0c;不知是与非&#xff0c;一饱百情足&#xff0c;一酣万事休 《天上大风&#xff1a;良宽俳句短歌汉诗400》良宽是公认与松尾芭…...

HTMLCSS模板实现水滴动画效果

.container 类&#xff1a;定义了页面的容器样式。 display: flex&#xff1a;使容器成为弹性容器&#xff0c;方便对其子元素进行布局。justify-content: center 和 align-items: center&#xff1a;分别使子元素在水平和垂直方向上居中对齐。min-height: 100vh&#xff1a;设…...

Python爬虫(5)静态页面抓取实战:requests库请求头配置与反反爬策略详解

目录 一、背景与需求‌二、静态页面抓取的核心流程‌三、requests库基础与请求头配置‌3.1 安装与基本请求3.2 请求头核心参数解析‌3.3 自定义请求头实战 四、实战案例&#xff1a;抓取豆瓣读书Top250‌1. 目标‌2. 代码实现3. 技术要点‌ 五、高阶技巧与反反爬策略‌5.1 动态…...

电子病历高质量语料库构建方法与架构项目(数据遗忘篇)

引言 在人工智能与医疗健康的深度融合时代,医疗数据的价值与风险并存。跨机构和平台的医疗数据共享对于推动医学研究、提高诊断精度和实现个性化治疗至关重要,但同时也带来了前所未有的隐私挑战。先进的AI技术可以从理论上去标识化的医疗扫描中重新识别个人身份,例如从MRI数…...

需求开发向设计规划的转化-从需求到设计和编码

需求和设计之间存在差别&#xff0c;但尽量使你的规格说明的具体实现无倾向性。理想情况是&#xff1a;在设计上的考虑不应该歪曲对预期系统的描述&#xff08; Jackson 1995&#xff09;。需求开发和规格说明应该强调对预期系统外部行为的理解和描述。让设计者和开发者参与需求…...

browser-use:AI驱动的浏览器自动化工具使用指南

AI驱动浏览器自动化 browser-use下载项目创建Python环境安装依赖配置环境运行WebUI简单使用Deep Research使用本地浏览器免登录 browser-use browser-use是一个基于 Python 的开源库&#xff0c;旨在简化 AI 代理与浏览器之间的交互。它将先进的AI功能与强大的浏览器自动化功能…...

Java从入门到“放弃”(精通)之旅——JavaSE终篇(异常)

Java从入门到“放弃”&#xff08;精通&#xff09;之旅&#x1f680;——JavaSE终篇&#xff08;异常&#xff09; 一、异常的概念与体系结构 1.1 什么是异常&#xff1f; 在生活中&#xff0c;当一个人表情痛苦时&#xff0c;我们可能会关心地问&#xff1a;"你是不是生…...

TCP协议理解

文章目录 TCP协议理解理论基础TCP首部结构图示字段逐项解析 TCP是面向连接&#xff08;Connection-Oriented&#xff09;面向连接的核心表现TCP 面向连接的核心特性TCP 与UDP对比 TCP是一个可靠的(reliable)序号与确认机制&#xff08;Sequencing & Acknowledgment&#xf…...

NS3-虚拟网络与物理网络的交互-1 仿真概述

NS3-虚拟网络与物理网络的交互-1 仿真概述 目录 1. 仿真概述1.1 Testbed 仿真示例-FdNetDevice1.2 模拟通道示例-TapDevice 1. 仿真概述 NS-3 专为集成到 TestBed 和虚拟机中而设计 环境。我们通过提供两种网络设备来满足这一需求。 第一种设备是文件描述符 net 设备 &#x…...

晶振老化:不可忽视的隐患与预防策略

在电子设备的世界里&#xff0c;晶振如同精准的时钟&#xff0c;为电路系统提供稳定的频率信号。然而&#xff0c;随着时间推移&#xff0c;晶振会不可避免地出现老化现象。这个看似细微的变化&#xff0c;却可能引发设备性能下降、数据传输错误等一系列问题。晶振老化究竟藏着…...

企业为何要禁止“片断引用开源软件代码”?一文看透!

开篇故事&#xff1a;一段“开源代码”引发的百亿级灾难 某电商平台为快速上线新功能&#xff0c;从GitHub复制了一段“高性能加密算法”代码到支付系统中。 半年后&#xff0c;黑客通过该代码中的隐藏后门&#xff0c;盗取百万用户信用卡信息。 事后调查&#xff1a;这段代…...

测试模版x

本篇技术博文摘要 &#x1f31f; 引言 &#x1f4d8; 在这个变幻莫测、快速发展的技术时代&#xff0c;与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮&#xff0c;一名什么都会一丢丢的网络安全工程师&#xff0c;也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…...

deepseek-r1-671B满血版,全栈式智能创作平台 - 多模态大模型赋能未来创作

引领AI创作新纪元 比象AI全栈式智能创作平台是基于全球领先的多模态大模型技术构建的新一代AI创作引擎&#xff0c;集成了前沿的BeyondLM-7B认知计算框架、BeyondDiffusion-XL视觉生成系统和BeyondSynth音视频合成技术&#xff0c;打造从内容构思到成品输出的完整智能创作闭环…...

Promethues 普罗米修斯

Prometheus 并非传统意义上的数据库&#xff0c;而是一个开源的系统监控和报警工具包&#xff0c;但它的核心组件之一是时间序列数据库&#xff0c;用于存储监控指标数据。以下是对 Prometheus 及其时间序列数据库功能的详细介绍&#xff1a; 1. Prometheus 概述 目标定位&a…...

Web 服务架构与技术组件概述

目录 web服务流程图 Web 服务流程图描述了客户端与服务器之间的交互。首先&#xff0c;用户通过浏览器发送请求到 Web 服务器。如果请求的是静态资源&#xff08;如 HTML、CSS、图片&#xff09;&#xff0c;Web 服务器直接返回响应&#xff1b;如果是动态资源&#xff0c;We…...

华硕NUC产品闪耀第31届中国国际广播电视信息网络展览会

2025年4月22日&#xff0c;第31届中国国际广播电视信息网络展览会在北京国家会议中心盛大开幕。作为一年一度的行业盛会&#xff0c;展会汇聚了来自全球各地的顶尖技术与设备厂商。在这片科技与创新交织的海洋中&#xff0c;华硕NUC以其卓越性能、小巧体积和创新技术十分引人注…...

Matplotlib高阶技术全景解析(续):动态交互、三维可视化与性能优化

目录 ​编辑 一、动态可视化&#xff1a;实时数据流与动画生成 1. 实时数据流可视化 2. 复杂动画控制 二、三维可视化&#xff1a;科学计算与工程建模 1. 基础三维绘图 2. 高级三维渲染优化 三、交互式可视化&#xff1a;GUI集成与Web部署 1. Tkinter/PyQt嵌入式开发 …...

[DDD传灯录]禅师:这,就是领域驱动设计(01-02)

用《软件方法》引领AI全流程开发-5月12-14日第3期 领域驱动设计是革命性的创造&#xff0c;是划时代的洞见&#xff0c;是解决业务领域用户需求技术系统功能逻辑架构分析设计复杂性的敏捷精益方法学。 这一切的根源&#xff0c;归结于领域驱动设计蕴含丰富的佛学思想。佛学是所…...

0基础 | Proteus仿真 | 51单片机 | 继电器

继电器---RELAY 本次选择一款5v一路继电器进行讲解 信号输入 IN1输入高电平&#xff0c;三极管导通&#xff0c;LED1点亮&#xff0c;电磁铁12接通吸引3向下与4接通&#xff0c;J1A的12接通 IN1输入低电平&#xff0c;则J1A的23接通 产品引脚定义及功能 序号 引脚符号 引脚…...

鸿蒙应用开发证书考试的一点想法

一、介绍&#xff1a; 直接上图 二、体验后的想法&#xff1a; 1.知识点在指南API参考最佳实践里面找 2.没有明确说明考试不能查第1点的文档&#xff0c;但是考试只有1个小时&#xff0c;合理分配时间 3.切屏三次后自动提交要注意&#xff0c;每月3次机会下月又有3次机会&a…...

MiniMind模型的web交互功能初试

MiniMind模型的web交互功能初试 一、前言 MiniMind提供了基于streamlit的web交互功能&#xff0c;能够即时切换模型和修改相关参数&#xff0c;经初步测试&#xff0c;具有比较好的体验感。本文介绍了使用MiniMind使用web交互功能的方法&#xff0c;并对使用中出现的问题给出…...

手把手玩转 JSON:快递包裹式思维拆箱装箱,Python / Java / Scala 全景实战指南

在日常开发中&#xff0c;JSON 就像全栈程序员口袋里那把万用螺丝刀——既轻便又几乎无处不在。本文面向初学者和中级读者&#xff0c;用“快递包裹”与“便签盒子”的比喻&#xff0c;结合 Python / Java / Scala 三语种示例&#xff0c;带你从概念、语法到实战全面掌握 JSON。…...

HFSS5(李明洋)——设置激励(波端口激励)

Magnetic是适用于铁磁氧导体的,只有前三种激励类型可以用于计算S参数 1波端口激励 也可以设置在模型内部,如果是设置在模型内部必须加一段理想导体,用于指定端口方向 1.1——模式 number 输入N:计算1-N的模式都计算 1.2——模式校准 计算端口特征阻抗有三种方式:Zpi、…...

NVIDIA --- 端到端自动驾驶

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、传统驾驶模型二、NVIDIA的端到端驾驶模型1.基本模型2.自查讯向量3.通用框架 总结 前言 端到端自动驾驶指的是系统接收来自摄像头雷达和激光雷达的原始传感…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(11): てあります。

日语学习-日语知识点小记-构建基础-JLPT-N4阶段&#xff08;11&#xff09;&#xff1a; てあります。 1、前言&#xff08;1&#xff09;情况说明&#xff08;2&#xff09;工程师的信仰 2、知识点&#xff08;1&#xff09;てあります。&#xff08;&#xff12;&#xff09;…...

【前端】如何检查内存泄漏

在实际的场景中&#xff0c;如果观察到内存持续出现峰值&#xff0c;并且内存消耗一直没有减少&#xff0c;那可能存在内存泄漏。 使用 Chrome DevTools 来识别内存图和一些内存泄漏&#xff0c;我们需要关注以下两个方面&#xff1a; ● 使用性能分析器可视化内存消耗&#xf…...

【多线程】四、死锁

文章目录 Ⅰ. 死锁的概念Ⅱ. 死锁的四个必要条件Ⅲ. 避免死锁的方案Ⅳ. 避免死锁的算法Ⅰ. 死锁的概念 ​ 死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用不会释放的资源而处于的一种永久等待状态。 ​ 通常,死锁发生在多个进程同时需要…...

【现代深度学习技术】循环神经网络06:循环神经网络的简洁实现

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…...

Video-LLaVA

一、研究背景与现有方法局限性 在多模态大语言模型(LVLMs)的发展中,现有方法面临两大核心挑战。其一为单一模态处理的局限,多数 LVLMs 仅能处理图像 - 语言或视频 - 语言等单一视觉模态,难以在统一框架下高效整合多种视觉输入。其二为统一表示的困难,尽管部分研究尝试通过…...

firewalld 详解

firewalld 详解 firewalld 是 Linux 系统中一个动态防火墙管理工具&#xff0c;取代了传统的 iptables&#xff0c;提供更灵活、动态的规则配置&#xff0c;支持运行时修改且无需重载服务。以下是其核心概念、常用操作及示例指南&#xff1a; 一、核心概念 区域&#xff08;Zo…...

QuecPython+USBNET:实现USB网卡功能

USBNET 概述 USBNET&#xff08;USB Networking&#xff09; 是一种通过 USB 接口 实现网络通信的技术&#xff0c;允许设备通过 USB 连接模拟以太网&#xff08;Ethernet over USB&#xff09;或直接进行网络数据传输。它广泛应用于嵌入式设备、工业控制、虚拟机和便携式设备…...

百度搜索AI开放计划:助力开发者通过MCP Server连接用户和应用

百度搜索AI开放计划&#xff1a;助力开发者通过MCP Server连接用户和应用 一、背景 2025年4月25日&#xff0c;百度在Create开发者大会上发布了全新的AI开放计划。这一计划的核心目的是实现用户和AI应用、MCP Server的高效链接&#xff0c;提供更流畅的互动体验&#xff0c;推…...

一文带你了解单例模式及其逐步优化~

单例模式 单例模式是一种创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。 使用场景&#xff1a; 需要频繁创建和销毁的对象 创建对象时耗时过多或资源消耗过大 工具类对象&#xff08;无状态的工具类&#xff09; 访问…...

【金仓数据库征文】-不懂数据库也能看懂!一文解析金仓技术介绍以典型应用

目录 一、主角登场 没有数据库&#xff0c;你的生活可能会 “乱套” 国产数据库之金仓 KingbaseES 金仓数据库凭啥 “C 位出道”&#xff1f; 二、金仓数据库产品核心解析 企业级数据库 “全能选手” 巧妙的 “内部协作” 按需选择的版本 四、生态联合解决方案深度探索…...

什么是视频上墙

视频联动上墙是指当监控系统中出现报警或其他特定事件时&#xff0c;相关的视频画面能够自动切换并显示在指定的监控大屏或显示设备上&#xff0c;以便监控人员能够快速、直观地查看事件现场的情况&#xff0c;及时做出响应和处理。 具体介绍• 系统组成 &#xff1a;一般由前端…...