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

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…...

数据库未正常关闭后,再次启动时只有主进程,数据库日志无输出

瀚高数据库 目录 环境 症状 问题原因 解决方案 环境 系统平台&#xff1a;银河麒麟svs&#xff08;X86_64&#xff09; 版本&#xff1a;4.5.8 症状 现象&#xff1a;使用pg_ctl stop停止数据库&#xff0c;未正常关闭&#xff1b;使用pg_ctl stop -m i 强制关闭数据库后&…...

【信息系统项目管理师】高分论文:论成本管理与采购管理(信用管理系统)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划成本管理2、成本估算3、成本预算4、成本控制论文 2019年1月,我作为项目经理参与了 XX基金管理有限公司信用管理系统项目。该项目成 本1000万,建设期为1年。通过该项目,XX基金管理有限公司在信用…...

Oracle Recovery Tools修复ORA-00742、ORA-600 ktbair2: illegal inheritance故障

接到客户反馈,一套运行在虚拟化平台中的Oracle数据库,由于机房断电,导致数据库无法启动,最初启动报错 2025-04-22T16:59:48.92222708:00 Completed: alter database mount exclusive alter database open 2025-04-22T16:59:52.60972608:00 Ping without log force is disabled:…...

基于 Netmiko 的网络设备自动化操作

学习目标 掌握 Netmiko 库的核心功能与使用场景。能够通过 Netmiko 连接多厂商设备并执行命令和配置。实现批量设备管理、配置备份与自动化巡检。掌握异常处理、日志记录与性能优化技巧。理解 Netmiko 在自动化运维体系中的角色。 1. Netmiko 简介 1.1 什么是 Netmiko Netmi…...

玉米产量遥感估产系统的开发实践(持续迭代与更新)

项目地址&#xff1a;项目首页 - maize_yield_estimation:玉米估产的flaskvue项目 - GitCode 开发中&#xff0c;敬请期待。。。 以下是预先写的提纲&#xff0c;准备慢慢补充 一、项目背景与工程目标 业务需求分析 农业遥感估产的行业痛点&#xff08;数据分散、模型精度不足…...

LeNet5 神经网络的参数解析和图片尺寸解析

1.LeNet-5 神经网络 以下是针对 LeNet-5 神经网络的详细参数解析和图片尺寸变化分析&#xff0c;和原始论文设计&#xff0c;通过分步计算说明各层的张量变换过程。 经典的 LeNet-5架构简化版&#xff08;原始论文输入为 32x32&#xff0c;MNIST 常用 28x28 需调整&#xff09…...

Axure大屏可视化模板:多领域数据决策的新引擎

在数据驱动决策的时代&#xff0c;Axure大屏可视化模板凭借交互性与可定制性&#xff0c;成为农业、园区管理、智慧城市、企业及医疗领域的创新工具&#xff0c;助力高效数据展示与智能决策。 核心应用场景 1. 农业精细化&#xff1a;实时监控土壤湿度、作物生长曲线&#x…...

大内存生产环境tomcat-jvm配置实践

话不多讲&#xff0c;奉上代码&#xff0c;分享经验&#xff0c;交流提高&#xff01; 64G物理内存,8核CPU生产环境tomcat-jvm配置如下&#xff1a; JAVA_OPTS-server -XX:MaxMetaspaceSize4G -XX:ReservedCodeCacheSize2G -XX:UseG1GC -Xms48G -Xmx48G -XX:MaxGCPauseMilli…...

APP和小程序需要注册域名吗?(国科云)

在移动互联网时代&#xff0c;APP和小程序已成为企业和个人提供服务、展示产品的重要渠道。那么APP和小程序的兴起是否对域名造成了冲击&#xff0c;APP和小程序是否需要注册域名呢&#xff1f; APP是否需要注册域名&#xff1f; 从技术上讲&#xff0c;没有域名的APP仍然可以…...

代码随想录算法训练营第60期第十七天打卡

今天我们继续进入二叉树的下一个章节&#xff0c;今天的内容我在写今天的博客前大致看了一下部分题目难度不算大&#xff0c;那我们就进入今天的题目。 第一题对应力扣编号为654的题目最大二叉树 这道题目的坑相当多&#xff0c;我第一次题目没有看明白就是我不知道到底是如何…...

小刚说C语言刷题——1565成绩(score)

1.题目描述 牛牛最近学习了 C 入门课程&#xff0c;这门课程的总成绩计算方法是&#xff1a; 总成绩作业成绩 20% 小测成绩 30% 期末考试成绩 50%。 牛牛想知道&#xff0c;这门课程自己最终能得到多少分。 输入 三个非负整数 A、B、C &#xff0c;分别表示牛牛的作业成…...

SOC估算:开路电压修正的安时积分法

SOC估算&#xff1a;开路电压修正的安时积分法 基本概念 开路电压修正的安时积分法是一种结合了两种SOC估算方法的混合技术&#xff1a; 安时积分法&#xff08;库仑计数法&#xff09; - 通过电流积分计算SOC变化 开路电压法 - 通过电池电压与SOC的关系曲线进行校准 方法原…...

Spark-SQL(总结)

了解到Spark SQL是Spark用于结构化数据处理的模块&#xff0c;其前身是Shark。Shark基于Hive开发&#xff0c;但对Hive的依赖制约了Spark的发展。掌握了 Spark - SQL 的特点&#xff0c;如易整合、统一数据访问、兼容 Hive 以及支持标准数据连接&#xff0c;可处理多种数据源的…...

Oracle for Linux安装和配置(11)——Oracle安装和配置

11.3. Oracle安装和配置 Linux上Oracle的安装及配置与Windows上差不多,只是安装软件的准备等有所不同,下面只对不同于Windows的部分进行较为详细的讲解,其他类似部分不再赘述。另外,无论选择使用虚机还是物理机,Oracle安装、配置和使用等方面几乎都是完全一样的。 11.3.…...

【防火墙 pfsense】2配置

&#xff08;1&#xff09;接口配置和接口 IP 地址分配 ->配置广域网&#xff08;WAN&#xff09;和局域网&#xff08;LAN&#xff09;接口&#xff0c;分配设备标识符&#xff0c;如 eth0、eth1 等&#xff1b; ->如将WAN 接口将被分配到 eth0&#xff0c;而 LAN 接口将…...

使用 SSE + WebFlux 推送日志信息到前端

为什么使用 SSE 而不使用 WebSocket, 请看 SEE 对比 Websocket 的优缺点。 特性SSEWebSocket通信方向单向&#xff08;服务器→客户端&#xff09;双向&#xff08;全双工&#xff09;协议基于 HTTP独立协议&#xff08;需 ws:// 前缀&#xff09;兼容性现代浏览器&#xff08…...

Ollama 常见命令速览:本地大模型管理指南

Ollama 常见命令速览&#xff1a;本地大模型管理指南 一、什么是 Ollama&#xff1f; Ollama 是一个轻量级工具&#xff0c;允许用户在本地快速部署和运行大型语言模型&#xff08;LLM&#xff09;&#xff0c;如 Llama、DeepSeek、CodeLlama 等。其命令行工具设计简洁&#…...

C++开发之设计模式

设计模式存在的意义 设计模式提供了经过验证的解决方案&#xff0c;帮助开发者在不同的项目中重用这些解决方法&#xff0c;减少重复劳动&#xff0c;提高代码的复用性。设计模式通常遵循面向对象的设计原则&#xff0c;如单一职责原则、开放封闭原则等&#xff0c;能够帮助开…...

AWS Glue ETL设计与调度最佳实践

一、引言 在AWS Glue中设计和调度ETL过程时&#xff0c;需结合其无服务器架构和托管服务特性&#xff0c;采用系统化方法和最佳实践&#xff0c;以提高效率、可靠性和可维护性。本文将从调度策略和设计方法两大维度详细论述&#xff0c;并辅以实际案例说明。 二、调度策略的最…...

二叉树的遍历(广度优先搜索)

二叉树的第二种遍历方式&#xff0c;层序遍历&#xff0c;本质是运用队列对二叉树进行搜索。 层序遍历是指将二叉树的每一层按顺序遍历&#xff0c;通过队列实现就是先将根节点push入队&#xff0c;统计此时的队列中的元素数量size&#xff0c;将size元素全部pop出去&#xff0…...

JavaScript 里创建对象

咱们来用有趣的方式探索一下 JavaScript 里创建对象的各种“魔法咒语”! 想象一下,你是一位魔法工匠,想要在你的代码世界里创造各种奇妙的“魔法物品”(也就是对象)。你有好几种不同的配方和工具: 1. 随手捏造(对象字面量 {}) 场景:你想快速做一个独一无二的小玩意儿…...

2025年计算机视觉与智能通信国际会议(ICCVIC 2025)

2025 International Conference on Computer Vision and Intelligent Communication 一、大会信息 会议简称&#xff1a;ICCVIC 2025 大会地点&#xff1a;中国杭州 收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Scholar等 二、会议简介 2025年计算机视觉与智能通…...

手工收集统计信息

有时想对某些表收集统计信息 CREATE OR REPLACE PROCEDURE GATHER_STATS ASDECLAREV_SQL1 VARCHAR(1000);--表游标CURSOR C1 ISSELECT (SELECT USER) AS TABLE_OWNER,TABLE_NAMEFROM USER_TABLES; --可以在这里加过滤条件--索引游标CURSOR C2 ISSELECT TABLE_OWNER,INDEX_NAM…...

flume整合Kafka和spark-streaming核心编程

flume整合Kafka 需求1&#xff1a;利用flume监控某目录中新生成的文件&#xff0c;将监控到的变更数据发送给kafka&#xff0c;kafka将收到的数据打印到控制台&#xff1a; 1.查看topic 2.编辑flume-Kafka.conf&#xff0c;并启动flume 3.启动Kafka消费者 4.新增测试数据 5.查…...

tokenizer的用法

下面介绍下基于 Hugging Face Transformers 库中 tokenizer&#xff08;分词器&#xff09;的主要用法和常用方法&#xff0c;帮助你了解如何在各种场景下处理文本。这里以 AutoTokenizer 为例&#xff0c;但大多数模型对应的 tokenizer 用法大同小异。 ───────────…...

kotlin和MVVM的结合使用总结(二)

MVVM 架构详解 核心组件&#xff1a;ViewModel 和 LiveData 在 Android 中&#xff0c;MVVM 架构主要借助 ViewModel 和 LiveData 来实现。ViewModel 负责处理业务逻辑&#xff0c;而 LiveData 则用于实现数据的响应式更新。 ViewModel 的源码分析 ViewModel 的核心逻辑在 …...

Git 入门知识详解

文章目录 一、Git 是什么1、Git 简介2、Git 的诞生3、集中式 vs 分布式3.1 集中式版本控制系统3.2 分布式版本控制系统 二、GitHub 与 Git 安装1、GitHub2、Git 安装 一、Git 是什么 1、Git 简介 Git 是目前世界上最先进的分布式版本控制系统。版本控制系统能帮助我们更好地管…...

React.memo 和 useMemo

现象 React 中&#xff0c;通常父组件的某个state发生改变&#xff0c;会引起父组件的重新渲染&#xff08;和其他state的重新计算&#xff09;&#xff0c;从而会导致子组件的重新渲染&#xff08;和其他非相关属性的重新计算&#xff09; 问题一&#xff1a;如何避免因为某个…...

EDI 如何与 ERP,CRM,WMS等系统集成

在数字化浪潮下&#xff0c;与制造供应链相关产业正加速向智能化供应链转型。传统人工处理订单、库存和物流的方式已难以满足下单客户对响应速度和数据准确性的严苛要求。EDI技术作为企业间数据交换的核心枢纽&#xff0c;其与ERP、CRM、WMS等业务系统的深度集成&#xff0c;成…...