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

Java查询数据库表信息导出Word

参考: POI生成Word多级标题格式_poi设置word标题-CSDN博客

1.概述

        使用jdbc查询数据库把表信息导出为word文档, 导出为word时需要下载word模板文件。

已实现数据库: 

  • KingbaseES, 实现代码: 点击跳转

2.效果图

2.1.生成word内容

所有数据库合并

数据库不合并

2.2.生成文件列表

3.代码文件结构

4.代码实现

4.1.dto

4.1.1.DbInfoDTO.java

package cn.nordrassil.db2doc.dto;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.List;@Data
@AllArgsConstructor
@NoArgsConstructor
public class DbInfoDTO {private String dbName;private String dbDescribe;private List<TableInfo> tableInfos;@Data@AllArgsConstructor@NoArgsConstructorpublic static class TableInfo {private String tableName;private String tableDescribe;private List<TableField> tableFields;private List<List<String>> tableContents;public TableInfo(String tableName, String tableDescribe, List<TableField> tableFields) {this.tableName = tableName;this.tableDescribe = tableDescribe;this.tableFields = tableFields;}}@Data@AllArgsConstructor@NoArgsConstructorpublic static class TableField {private String name;private String type;private Integer length;private String allowEmpty;private String isPrimaryKey;private String defaultValue;private String describe;}}

4.1.2.DbConnParamDTO.java

package cn.nordrassil.db2doc.dto;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class DbConnParamDTO {private String host;private Integer port;private String username;private String password;// 随机填一个数据库即可private String randomDatabase;// 数据库前缀过滤private String dbPrefixFilter;// 等于true是只会导出第一张表private Boolean testRun;
}

4.1.3.ExportWordParamDTO

package cn.nordrassil.db2doc.dto;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.List;@Data
@AllArgsConstructor
@NoArgsConstructor
public class ExportWordParamDTO {// 数据信息private List<DbInfoDTO> ds;// 导出word模板文件private String wordTemplateFile;// 导出目录private String exportFolder;// 所有数据库是否合并到一个文档, 默认每个数据库一个文档private Boolean merge = Boolean.FALSE;
}

4.2.util

4.2.1.CommonUtil.java

package cn.nordrassil.db2doc.util;import java.io.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class CommonUtil {private static DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");private static DateTimeFormatter dateFormatter2 = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss");public static String readByLineRs(String path) {StringBuffer sb = new StringBuffer();File file = new File(path);BufferedReader reader = null;String temp = null;try {reader = new BufferedReader(new FileReader(file));while ((temp = reader.readLine()) != null) {sb.append(temp).append("\n");}} catch (Exception e) {e.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (Exception e) {e.printStackTrace();}}}return sb.toString();}/*** 依次替换{}* 例 : join("a={},b={}",1,2) => a=1,b=2** @param str* @param param* @return*/public static String join(String str, Object... param) {try {for (Object p : param) {String processedParam = p.toString().replace("\\", "\\\\");str = str.replaceFirst("\\{\\}", processedParam);}} catch (Exception e) {for (Object p : param) {str = str + p;}}return str;}public static void writeString(String content, String path) {try {File file = new File(path);if (!file.exists()) {file.createNewFile();}FileWriter fw = new FileWriter(file.getAbsoluteFile());BufferedWriter bw = new BufferedWriter(fw);bw.write(content);bw.close();} catch (IOException e) {e.printStackTrace();}}public static void info(String str, Object... param) {System.out.println(LocalDateTime.now().format(dateFormatter) + "|" + join(str, param));}public static String getDayTime() {return LocalDateTime.now().format(dateFormatter2);}public static void createDirectoryIfNotExists(String absolutePath) {File file = new File(absolutePath);// 获取文件所在的目录File parentDir = file.getParentFile();if (parentDir != null && !parentDir.exists()) {// 创建目录parentDir.mkdirs();}}}

4.3.service

4.3.1.DbInfoExportWordService.java

package cn.nordrassil.db2doc;import cn.nordrassil.db2doc.dto.DbInfoDTO;
import cn.nordrassil.db2doc.dto.ExportWordParamDTO;
import com.alibaba.fastjson.JSONObject;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyles;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import static cn.nordrassil.db2doc.util.CommonUtil.*;// 参考: https://blog.csdn.net/qq_37945565/article/details/121518330public class DbInfoExportWordService {public static List<String> tableTitles = new ArrayList<String>() {{add("序号");add("字段名");add("字段类型");add("长度");add("非空");add("主键");add("默认值");add("注释");}};public static List<String> fields = new ArrayList<String>() {{add("name");add("type");add("length");add("allowEmpty");add("isPrimaryKey");add("defaultValue");add("describe");}};public static void generateWord(ExportWordParamDTO paramDTO) throws Exception {// 获得模板文档的整体样式XWPFDocument template = new XWPFDocument(new FileInputStream(paramDTO.getWordTemplateFile()));CTStyles wordStyles = template.getStyle();int totalTableCount = 0;int index = 1;List<DbInfoDTO> ds = paramDTO.getDs();XWPFDocument document = null;boolean merge = paramDTO.getMerge() != null && paramDTO.getMerge();if (merge) {document = new XWPFDocument();}for (DbInfoDTO d : ds) {info("执行第[{}/{}]生成word文档...表数量:{}", index, ds.size(), d.getTableInfos().size());if (!merge) {document = new XWPFDocument();}// 获取新建文档对象的样式XWPFStyles newStyles = document.createStyles();// 关键行// 修改设置文档样式为静态块中读取到的样式newStyles.setStyles(wordStyles);if (merge) {XWPFParagraph title1 = document.createParagraph();title1.setStyle("2");XWPFRun titleRun1 = title1.createRun();String dbText = index + "." + d.getDbName();if (d.getDbDescribe() != null) {dbText += "(" + d.getDbDescribe().replaceAll("\r\n", "").replaceAll("\r", "").replaceAll("\n", "") + ")";}titleRun1.setText(dbText);}List<DbInfoDTO.TableInfo> tableInfos = d.getTableInfos();totalTableCount += tableInfos.size();for (int k = 0; k < tableInfos.size(); k++) {DbInfoDTO.TableInfo tableInfo = tableInfos.get(k);XWPFParagraph title2 = document.createParagraph();XWPFRun titleRun2 = title2.createRun();String tableText;if (merge) {title2.setStyle("3");tableText = index + "." + (k + 1) + "." + tableInfo.getTableName();} else {title2.setStyle("2");tableText = (k + 1) + "." + tableInfo.getTableName();}if (tableInfo.getTableDescribe() != null) {tableText += "(" + tableInfo.getTableDescribe().replaceAll("\r\n", "").replaceAll("\r", "").replaceAll("\n", "") + ")";}titleRun2.setText(tableText);// 创建表格(第一列为序号)List<DbInfoDTO.TableField> tableFields = tableInfo.getTableFields();XWPFTable table = document.createTable(tableFields.size(), 8);int titleFontSize = 10;int textFontSize = 8;// 设置表格标题样式for (int i = 0; i < table.getRows().get(0).getTableCells().size(); i++) {XWPFTableCell cell = table.getRows().get(0).getCell(i);XWPFParagraph cellParagraph = cell.getParagraphs().get(0);cellParagraph.setIndentationLeft(0); // 设置左侧缩进为0cellParagraph.setIndentationRight(0); // 设置右侧缩进为0cellParagraph.setIndentationFirstLine(0); // 设置首行缩进为0cellParagraph.setIndentationLeft(0);// 设置单元格背景色为灰色CTTcPr cellPr = cell.getCTTc().addNewTcPr();CTShd shd = cellPr.addNewShd();shd.setFill("D3D3D3");cellParagraph.setAlignment(ParagraphAlignment.CENTER);XWPFRun cellRun = cellParagraph.createRun();cellRun.setBold(true);cellRun.setText(tableTitles.get(i));cellRun.setFontSize(titleFontSize);}// 写入表格内容for (int row = 1; row < table.getNumberOfRows(); row++) {for (int col = 0; col < table.getRow(row).getTableCells().size(); col++) {XWPFTableCell cell = table.getRow(row).getCell(col);XWPFParagraph cellParagraph = cell.getParagraphs().get(0);XWPFRun cellRun = cellParagraph.createRun();if (col == 0) {cellRun.setText(row + "");} else {DbInfoDTO.TableField tableField = tableFields.get(row - 1);JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(tableField));cellRun.setText(jsonObject.getString(fields.get(col - 1)));}CTTcPr tcPr = cell.getCTTc().getTcPr();if (tcPr == null) {tcPr = cell.getCTTc().addNewTcPr();}if (!tcPr.isSetTcMar()) {tcPr.addNewTcMar();}tcPr.getTcMar().addNewLeft().setW(0);tcPr.getTcMar().addNewRight().setW(0);tcPr.getTcMar().addNewTop().setW(0);tcPr.getTcMar().addNewBottom().setW(0);cellRun.setFontSize(textFontSize);cellParagraph.setIndentationLeft(0);// 设置段落左对齐cellParagraph.setAlignment(ParagraphAlignment.LEFT);// 设置左缩进为 0cellParagraph.setIndentationLeft(0);}}}if (!merge) {// 保存文档String outputFile = paramDTO.getExportFolder() + File.separator + d.getDbName() + ".docx";createDirectoryIfNotExists(outputFile);try (FileOutputStream out = new FileOutputStream(outputFile)) {document.write(out);info("第[{}/{}]数据库信息生成word文档完成, 文档路径:{}", index, ds.size(), outputFile);} catch (IOException e) {e.printStackTrace();}}index++;}if (merge) {// 保存文档String outputFile = paramDTO.getExportFolder() + File.separator + getDayTime() + "_all_db.docx";createDirectoryIfNotExists(outputFile);try (FileOutputStream out = new FileOutputStream(outputFile)) {document.write(out);info("所有数据库信息生成word文档完成, 文档路径:{}", outputFile);} catch (IOException e) {e.printStackTrace();}}info("数据库已导出为word文档完成, 数据库数量:{}, 所有表总数量:{}", ds.size(), totalTableCount);}
}

4.3.2.GetDbInfoService.java

package cn.nordrassil.db2doc;import cn.nordrassil.db2doc.dto.DbConnParamDTO;
import cn.nordrassil.db2doc.dto.DbInfoDTO;import java.util.List;public interface GetDbInfoService {List<DbInfoDTO> get(DbConnParamDTO dto);
}

5.依赖 

5.1.mave依赖

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version><scope>compile</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version><scope>provided</scope></dependency><!-- Apache Commons Compress 用于处理多种归档文件格式 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.24.0</version></dependency><!-- Apache Commons IO 提供了 IO 操作的工具类 --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.13.0</version></dependency><dependency><groupId>com.github.junrar</groupId><artifactId>junrar</artifactId><version>7.5.5</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency>

5.2.word文档模板

word/word模板.docx · 楽焫旒璡/public-share - 码云 - 开源中国

6.测试

6.1.MyTest.java

package cn.nordrassil.db2doc;import cn.nordrassil.db2doc.dto.DbConnParamDTO;
import cn.nordrassil.db2doc.dto.DbInfoDTO;
import cn.nordrassil.db2doc.dto.ExportWordParamDTO;
import cn.nordrassil.db2doc.impl.GetDbInfoKingBaseEsService;
import cn.nordrassil.db2doc.util.CommonUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;import java.io.File;
import java.util.ArrayList;
import java.util.List;public class MyTest {public static void main(String[] args) throws Exception {String exportFolder = System.getProperty("user.dir") + File.separator + "files";String templateFile = "F:\\文档\\开发\\word模板.docx";String resultFile = exportFolder + File.separator + "result.json";//getDbInfo(resultFile);List<DbInfoDTO> ds = readData(resultFile);ExportWordParamDTO exportWordParamDTO = new ExportWordParamDTO(ds, templateFile, exportFolder, true);//DbInfoExportWordService.generateWord(exportWordParamDTO);}public static void getDbInfo(String resultFile) throws Exception {GetDbInfoService getDbInfoService = new GetDbInfoKingBaseEsService();List<DbInfoDTO> dbInfoDTOS = getDbInfoService.get(new DbConnParamDTO("192.168.1.1",5432,"root","123456","test","test",true));CommonUtil.writeString(JSONObject.toJSONString(dbInfoDTOS), resultFile);}public static List<DbInfoDTO> readData(String resultFile) {JSONArray jas = JSONObject.parseArray(CommonUtil.readByLineRs(resultFile));List<DbInfoDTO> ds = new ArrayList<>();for (int i = 0; i < jas.size(); i++) {JSONObject ja = jas.getJSONObject(i);DbInfoDTO dbInfo = new DbInfoDTO();dbInfo.setDbName(ja.getString("dbName"));dbInfo.setDbDescribe(ja.getString("dbDescribe"));List<DbInfoDTO.TableInfo> tableInfos = new ArrayList<>();dbInfo.setTableInfos(tableInfos);JSONArray tis = ja.getJSONArray("tableInfos");for (int k = 0; k < tis.size(); k++) {JSONObject ti = tis.getJSONObject(k);DbInfoDTO.TableInfo tableInfo = new DbInfoDTO.TableInfo();tableInfos.add(tableInfo);tableInfo.setTableName(ti.getString("tableName"));tableInfo.setTableDescribe(ti.getString("tableDescribe"));JSONArray tfs = ti.getJSONArray("tableFields");List<DbInfoDTO.TableField> tableFields = new ArrayList<>();tableInfo.setTableFields(tableFields);for (int j = 0; j < tfs.size(); j++) {JSONObject tf = tfs.getJSONObject(j);tableFields.add(new DbInfoDTO.TableField(tf.getString("name"),tf.getString("type"),tf.getInteger("length"),tf.getString("allowEmpty"),tf.getString("isPrimaryKey"),tf.getString("defaultValue"),tf.getString("describe")));}}ds.add(dbInfo);}return ds;}
}

相关文章:

Java查询数据库表信息导出Word

参考: POI生成Word多级标题格式_poi设置word标题-CSDN博客 1.概述 使用jdbc查询数据库把表信息导出为word文档, 导出为word时需要下载word模板文件。 已实现数据库: KingbaseES, 实现代码: 点击跳转 2.效果图 2.1.生成word内容 所有数据库合并 数据库不合并 2.2.生成文件…...

DAY9:Oracle数据库安全管理深度解析

引言 在当今数据泄露事件频发的时代&#xff0c;数据库安全管理已成为DBA和开发者的必修课。本文将深入探讨Oracle数据库安全管理的四大核心领域&#xff1a;用户权限管理、数据库审计、透明数据加密&#xff08;TDE&#xff09;和虚拟私有数据库&#xff08;VPD&#xff09;&…...

RK3588平台用v4l工具调试USB摄像头实践(亮度,饱和度,对比度,色相等)

目录 前言:v4l-utils简介 一&#xff1a;查找当前的摄像头设备 二&#xff1a;查看当前摄像头支持的v4l2-ctl调试参数 三根据提示设置对应参数&#xff0c;在提示范围内设置 四&#xff1a;常用调试命令 五:应用内执行命令方法 前言:v4l-utils简介 v4l-utils工具是由Linu…...

Dart Flutter数据类型详解 int double String bool list Map

目录 字符串的几种方式 bool值的判断 List的定义方式 Map的定义方式 Dart判断数据类型 (is 关键词来判断类型) Dart的数据类型详解 int double String bool list Map 常用数据类型: Numbers(数值): int double Strings(字符串) String Booleans(布尔…...

LainChain技术解析:基于RAG架构的下一代语言模型增强框架

摘要 随着大语言模型(LLM)在自然语言处理领域的突破性进展,如何突破其知识时效性限制、提升事实准确性成为关键挑战。LainChain通过整合检索增强生成(RAG)技术,构建起动态知识接入框架,为LLM提供实时外部知识支持。本文从技术原理、架构设计、应用场景三个维度,深入解…...

组件是怎样写的(1):虚拟列表-VirtualList

本篇文章是《组件是怎样写的》系列文章的第一篇&#xff0c;该系列文章主要说一下各组件实现的具体逻辑&#xff0c;组件种类取自 element-plus 和 antd 组件库。 每个组件都会有 vue 和 react 两种实现方式&#xff0c;可以点击 https://hhk-png.github.io/components-show/ …...

在Linux中,使用read函数去读取写入文件空洞部分时,读取出来的内容是什么?为什么这样操作,以及应用场景?

使用 read 函数读取文件空洞&#xff08;hole&#xff09;部分时&#xff0c;读取到的内容会被系统填充为 \0&#xff08;即零字节&#xff09;。文件空洞是稀疏文件中未实际分配磁盘空间的区域&#xff0c;但逻辑上表现为连续的零字节。 1.在指定空洞部分后&#xff0c;写入数…...

Qt6笔记-对Qt6中对CMakeLists.txt的解析

首先&#xff0c;新建Qt Console Application项目。 下面对CMakeLists.txt进行次理解。新建好后&#xff0c;Qt Creator会生成CMakeLists.txt&#xff0c;具体内容如下&#xff1a; cmake_minimum_required(VERSION 3.16)project(EasyCppMain LANGUAGES CXX)set(CMAKE_AUTOUIC…...

CIFAR10图像分类学习笔记(三)---数据加载load_cifar10

新创建一个load_cifar10源文件 需要导入的包 import glob from torchvision import transforms from torch.utils.data import DataLoader ,Dataset import os #读取工具 from PIL import Image import numpy as np 01同样定义10个类别的标签名数组 label_name ["airpl…...

计算机视觉cv入门之答题卡自动批阅

前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识&#xff0c;这里我们以答题卡自动批阅这一案例来实操一下。 大致思路 答题卡自动批阅的大致流程可以分为这五步&#xff1a;图像预处理-寻找考试信息区域与涂卡区域-考生信息区域OCR识别-涂卡区域填涂答案判断…...

Java学习手册:JSON 数据格式基础知识

1. JSON 简介 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于阅读和编写&#xff0c;也易于机器解析和生成。它最初来源于 JavaScript&#xff0c;但如今已被许多语言所采用&#xff0c;包括 Java、Python、C 等。JSON 以…...

【Python爬虫详解】第四篇:使用解析库提取网页数据——BeautifuSoup

在前一篇文章中&#xff0c;我们学习了如何编写第一个爬虫程序&#xff0c;成功获取了网页的HTML内容。然而&#xff0c;原始HTML通常包含大量我们不需要的信息&#xff0c;真正有价值的数据往往隐藏在HTML的标签和属性中。这一篇&#xff0c;我们将学习如何使用Python的解析库…...

《重塑AI应用架构》系列: Serverless与MCP融合创新,构建AI应用全新智能中枢

在人工智能飞速发展的今天&#xff0c;数据孤岛和工具碎片化问题一直是阻碍AI应用高效发展的两大难题。由于缺乏统一的标准&#xff0c;AI应用难以无缝地获取和充分利用数据价值。 为了解决这些问题&#xff0c;2024年AI领域提出了MCP&#xff08;Model Context Protocol模型上…...

深度图可视化

import cv2# 1.读取一张深度图 depth_img cv2.imread("Dataset_depth/images/train/1112_0-rgb.png", cv2.IMREAD_UNCHANGED) print(depth_img.shape) cv2.imshow("depth", depth_img) # (960, 1280) print(depth_img)# 读取一张rgb的图片做对比 input_p…...

【调优】log日志海量数据分表后查询速度调优

原始实现 使用pagehelper实现分页 // 提取开始时间的年份和月份&#xff0c;拼装成表名List<String> timeBetween getTimeBetween(condition);List<String> fullTableName getFullTableName(Constants.LOG_TABLE_NAME, timeBetween);PageHelperUtil.startPage(c…...

hive默认的建表格式

在 Hive 中创建表时&#xff0c;默认的建表语法格式如下&#xff1a; CREATE TABLE table_name (column1_type,column2_type,... ) ROW FORMAT DELIMITED FIELDS TERMINATED BY , STORED AS TEXTFILE;在这个语法中&#xff1a; CREATE TABLE table_name&#xff1a;指定要创建…...

sass 变量

基本使用 如果分配给变量的值后面添加了 !default 标志 &#xff0c;这意味着该变量如果已经赋值&#xff0c;那么它不会被重新赋值&#xff0c;但是&#xff0c;如果它尚未赋值&#xff0c;那么它会被赋予新的给定值。 如果在此之前变量已经赋值&#xff0c;那就不使用默认值…...

微软Edge浏览器字体设置

前言 时间&#xff1a;2025年4月 自2025年4月起&#xff0c;微软Edge浏览器的默认字体被微软从微软雅黑替换成了Noto Sans&#xff0c;如下图。Noto Sans字体与微软雅黑风格差不多&#xff0c;但在4K以下分辨率的显示器上较微软雅黑更模糊&#xff0c;因此低分辨率的显示器建议…...

Vue生命周期详细解析

前言 Vue.js作为当前最流行的前端框架之一&#xff0c;其生命周期钩子函数是每个Vue开发者必须掌握的核心概念。本文将全面解析Vue的生命周期&#xff0c;帮助开发者更好地理解Vue实例的创建、更新和销毁过程。 一、Vue生命周期概述 Vue实例从创建到销毁的整个过程被称为Vue…...

基于c#,wpf,ef框架,sql server数据库,音乐播放器

详细视频: 【基于c#,wpf,ef框架,sql server数据库&#xff0c;音乐播放器。-哔哩哔哩】 https://b23.tv/ZqmOKJ5...

前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程

前端项目搭建集锦&#xff1a;vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展&#xff0c;开箱即用&#xff0c;附带项目搭建教程 前言&#xff1a;一、Vue项目下载快速通道二、React项目下载快速通道三、BrowserPlugins项目下载快速通道四、项目搭建教…...

【C++游戏引擎开发】第21篇:基于物理渲染(PBR)——统计学解构材质与光影

引言 宏观现象:人眼观察到的材质表面特性(如金属的高光锐利、石膏的漫反射柔和),本质上是微观结构对光线的统计平均结果。 微观真相:任何看似平整的表面在放大后都呈现崎岖的微观几何。每个微表面(Microfacet)均为完美镜面,但大量微表面以不同朝向分布时,宏观上会表…...

什么是Maven

Maven的概念 Maven是一个一键式的自动化的构建工具。Maven 是 Apache 软件基金会组织维护的一款自动化构建工具&#xff0c;专注服务于Java 平台的项目构建和依赖管理。Maven 这个单词的本意是&#xff1a;专家&#xff0c;内行。Maven 是目前最流行的自动化构建工具&#xff0…...

强化学习复习,价值函数的推导——北大pdf p41(ppt75)(动手学也有)

我们经常看到强化学习中有求汇报期望 E E E&#xff0c;转化为价值函数(value function) V V V&#xff0c;策略的状态价值函数(State-Value function) V π V_π Vπ​和动作价值函数&#xff08;action-value function&#xff09; Q π Q_π Qπ​。还有提到通过将期望将消除…...

neo4j中节点内的名称显示不全解决办法(如何让label在节点上自动换行)

因为节点过多而且想让节点中所有文字都显示出来而放大节点尺寸 从neo4j中导出png,再转成PDF来查看时&#xff0c;要看清节点里面的文字就得放大5倍才行 在网上看了很多让里面文字换行的办法都不行 然后找到一个比较靠谱的办法是在要显示的标签内加换行符 但是我的节点上显示的是…...

day 32 学习笔记

文章目录 前言一、模版匹配的概念二、模版匹配方法 前言 通过今天的学习&#xff0c;我掌握了OpenCV中有关模版匹配和模版匹配方法的相关原理和操作 一、模版匹配的概念 模板匹配就是用模板图&#xff08;通常是一个小图&#xff09;在目标图像&#xff08;通常是一个比模板图…...

【GIT】github中的仓库如何删除?

你可以按照以下步骤删除 GitHub 上的仓库&#xff08;repository&#xff09;&#xff1a; &#x1f6a8; 注意事项&#xff1a; ❗️删除仓库是不可恢复的操作&#xff0c;所有代码、issue、pull request、release 等内容都会被永久删除。 &#x1f9ed; 删除 GitHub 仓库步骤…...

使用Python将YOLO的XML标注文件转换为TXT文件格式

使用Python将YOLO的XML标注文件转换为TXT文件格式&#xff0c;并划分数据集 import xml.etree.ElementTree as ET import os from os import listdir, getcwd from os.path import join import random from shutil import copyfile from PIL import Image# 只要改下面的CLASSE…...

docker容器监控自动恢复

关于实现对docker容器监控以及自动恢复&#xff0c;这里介绍两种实现方案。 方案1&#xff1a; 实现思路&#xff1a; 找到&#xff08;根据正则表达式&#xff09;所有待监控的docker容器&#xff0c;此处筛选逻辑根据docker运行状态找到已停止&#xff08;Exit&#xff09;类…...

【农气项目】基于适宜度的产量预报

直接上干货&#xff08;复制到开发工具即可运行的代码&#xff09; 1. 适宜度模型及作物適宜度计算方法 2. 产量分离 3. 基于适宜度计算产量预报 1. 适宜度模型及作物適宜度计算方法 // 三基点温度配置private final double tempMin;private final double tempOpt;private f…...