简介本资源是一套面向Java初学者与SpringBoot入门开发者的MySQL数据库集成实战方案聚焦JDBC原生方式连接与操作MySQL的完整实现路径覆盖环境搭建、驱动配置、连接池管理、CRUD编码及常见异常处理等核心环节。压缩包共136个文件包含92个DLL动态库含Oracle/MySQL本地驱动及依赖组件、3个SQL建表与初始化脚本、3个Java源码文件含JdbcController与User实体类、6个XML配置文件Spring Boot数据源与MyBatis相关、4个EXE安装工具及3个MSI数据库服务安装包辅以PDF文档、properties配置示例和HTML说明页整体容量达637.42MB结构完整、开箱即用。目前已有601人学习下载资源提供可直接运行的Spring Boot工程含编译后class文件与启动类、配套MySQL安装介质、本地化驱动库及典型错误排查提示特别适合缺乏数据库实战经验、需从零构建稳定连接能力的学习者快速上手并理解底层交互逻辑。1. SpringBoot JDBC 连 MySQL不是配个 URL 就能查出数据的黑匣子你是不是也遇到过SpringBoot 项目里application.yml写好了spring.datasource.url启动日志显示 “Started Application”可一调JdbcTemplate.queryForObject()就抛CannotGetJdbcConnectionException或者更玄学的是——本地跑得好好的打包成 jar 丢到测试机上连数据库超时都不报直接卡死在DataSourceHealthIndicator这不是环境问题是 JDBC 这层薄薄的抽象底下藏着至少 5 类配置冲突、3 种驱动加载时机陷阱、还有 MySQL 8.0 默认 strict mode 对空值和时间戳的“道德审判”。这份整套解决方案不讲 SpringBoot 自动装配原理只给你能立刻粘贴、改两行就跑通的源码包含完整pom.xml依赖树、MySQL 5.7/8.0 双版本安装包Windows/Linux 二进制免编译版、以及我在线上压测时被反向教育过的 4 个关键参数——比如useSSLfalse在 MySQL 8.0.28 已失效必须换成enabledTLSProtocolsTLSv1.2。适合正在赶需求、没时间啃官方文档的 Java 后端也适合刚学完 JDBC 基础、第一次把Connection塞进 Spring 容器的新手。2. 从零建库到 SpringBoot 连通三步闭环验证法2.1 MySQL 安装包实操为什么推荐二进制版而非 MSI网络上大量教程默认用 Windows MSI 安装器但实际落地时你会发现MSI 安装后服务名固定为MySQL80而某些国产中间件监控系统硬编码扫描mysqld进程名更致命的是MSI 默认开启validate_password插件导致你执行CREATE USER dev% IDENTIFIED BY 123;直接报错Your password does not satisfy the current policy requirements新手根本找不到策略配置在哪。我们提供的安装包是官方二进制压缩包mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz/mysql-8.0.33-linux-glibc2.12-x86_64.tar.gz解压即用关键步骤如下# Linux 下解压并初始化以 8.0.33 为例 tar -xzf mysql-8.0.33-linux-glibc2.12-x86_64.tar.gz mv mysql-8.0.33-linux-glibc2.12-x86_64 /opt/mysql8 mkdir -p /opt/mysql8/data /opt/mysql8/logs # 初始化生成 root 临时密码注意看 stdout 最后一行 /opt/mysql8/bin/mysqld --initialize --userroot --datadir/opt/mysql8/data --log-error/opt/mysql8/logs/error.log # 启动服务不依赖 systemd避免权限问题 /opt/mysql8/bin/mysqld_safe --defaults-file/opt/mysql8/my.cnf 提示my.cnf必须显式指定否则mysqld_safe会读取/etc/my.cnf导致配置混乱。我们包内已预置安全配置模板关键项包括skip-grant-tables仅首次初始化启用、default_authentication_pluginmysql_native_password兼容老驱动、sql_modeSTRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO明确声明严格模式避免上线后行为突变。2.2 创建开发专用用户绕过 MySQL 8.0 的密码插件陷阱MySQL 8.0 默认启用caching_sha2_password认证插件而 SpringBoot 2.1.x 默认依赖的mysql-connector-java:8.0.11驱动虽支持但需显式配置allowPublicKeyRetrievaltrue否则连接时抛Public Key Retrieval is not allowed。更糟的是若你用CREATE USER语句未指定插件新用户会继承全局插件导致 JDBC 连接失败。正确做法是强制降级为兼容性最好的mysql_native_password-- 登录 MySQL用初始化时生成的临时密码 mysql -u root -p -- 执行以下命令注意必须分两步先创建用户再修改插件 CREATE USER springboot_dev% IDENTIFIED WITH mysql_native_password BY Pssw0rd123; GRANT ALL PRIVILEGES ON *.* TO springboot_dev% WITH GRANT OPTION; FLUSH PRIVILEGES; -- 验证插件类型必须返回 mysql_native_password SELECT user, host, plugin FROM mysql.user WHERE user springboot_dev;参数说明WITH mysql_native_password是 MySQL 8.0 新语法替代旧版IDENTIFIED BY PASSWORDFLUSH PRIVILEGES不可省略否则权限不生效%表示允许任意 IP 连接生产环境请替换为具体网段如192.168.10.%。2.3 SpringBoot 工程初始化精准依赖 零配置启动很多项目失败源于pom.xml依赖冲突。例如同时引入spring-boot-starter-jdbc和mybatis-spring-boot-starter后者会传递引入HikariCP而前者默认用HikariCP看似没问题但若mybatis版本较老如 2.1.0其 HikariCP 版本为 3.2.3与 SpringBoot 2.7 要求的 4.0.3 不兼容导致DataSource初始化失败。我们源码包中pom.xml严格锁定dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- 关键只引入 JDBC starter不带任何 ORM -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-jdbc/artifactId /dependency !-- 显式指定 MySQL 驱动版本8.0.33 对应驱动 8.0.33 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId scoperuntime/scope version8.0.33/version /dependency /dependencies注意mysql-connector-java必须设为runtime作用域否则编译期会触发驱动类加载导致ClassNotFoundExceptionversion必须与 MySQL 服务端版本严格匹配8.0.33 服务端用 8.0.33 驱动不可混用 8.0.28 驱动。3. application.yml 核心配置每个参数都是线上翻车现场换来的3.1 数据源基础配置URL 字符串里的 7 个生死参数SpringBoot 的spring.datasource.url看似简单实则是 JDBC 连接成败的总开关。我们源码包中application.yml的配置经过 3 轮压测验证关键参数如下spring: datasource: url: - jdbc:mysql://127.0.0.1:3306/testdb? useSSLfalse serverTimezoneAsia/Shanghai allowPublicKeyRetrievaltrue enabledTLSProtocolsTLSv1.2 characterEncodingutf8mb4 autoReconnecttrue failOverReadOnlyfalse username: springboot_dev password: Pssw0rd123 driver-class-name: com.mysql.cj.jdbc.Driver参数逐条解析useSSLfalseMySQL 8.0.28 已废弃但保留向后兼容若服务端强制 SSL则必须删掉此项并配置证书路径。serverTimezoneAsia/Shanghai必须显式设置否则java.time.LocalDateTime插入数据库时区错乱表现为时间快 8 小时或慢 8 小时。allowPublicKeyRetrievaltrue仅当服务端用caching_sha2_password时需要但我们已创建用户时指定mysql_native_password此项可删留着是防未来切换认证方式。enabledTLSProtocolsTLSv1.2MySQL 8.0.28 强制要求否则连接直接拒绝错误日志无明确提示。characterEncodingutf8mb4支持 emoji 和生僻字utf8在 MySQL 中实际是utf8mb3不支持四字节 UTF-8。autoReconnecttrue网络抖动时自动重连但不能替代连接池健康检查仅作兜底。failOverReadOnlyfalse主从架构下防止误连从库变成只读此处单机部署设为 false 即可。3.2 HikariCP 连接池调优为什么 maxPoolSize20 反而拖垮性能HikariCP 是 SpringBoot 默认连接池但maxPoolSize不是越大越好。某次线上事故将maxPoolSize从 10 改为 50QPS 反而下降 40%原因是 MySQL 服务端max_connections默认 15150 个连接并发打过去大量线程阻塞在Waiting for table metadata lock。我们源码包中application.yml的连接池配置经 JMeter 1000 并发压测验证spring: datasource: hikari: # 连接池大小CPU 核数 * 2 1 是黄金公式4 核机器设为 9 maximum-pool-size: 9 # 连接最长存活时间避免长连接占用服务端资源 max-lifetime: 1800000 # 30 分钟 # 连接空闲超时回收不用的连接 idle-timeout: 600000 # 10 分钟 # 连接获取超时避免线程无限等待 connection-timeout: 30000 # 30 秒 # 测试连接有效性 SQLMySQL 用 SELECT 1 connection-test-query: SELECT 1 # 初始化时创建的连接数避免首请求延迟 initialization-fail-timeout: 1逻辑说明maximum-pool-size9是基于 4 核 CPU 的保守值若应用有大量 IO 等待如调外部 HTTP可适度提高至 15max-lifetime1800000强制连接 30 分钟后重建规避 MySQL 的wait_timeout默认 28800 秒8 小时导致的连接假死connection-test-query必须设为SELECT 1validationQuery在 HikariCP 中已弃用。3.3 JdbcTemplate 基础用法从查询到事务的最小可行代码SpringBoot 自动注入JdbcTemplate但新手常犯两个错误一是直接 newJdbcTemplate导致无法使用连接池二是事务注解Transactional加在 private 方法上无效。我们源码包中UserDao.java给出最简可用范式Repository public class UserDao { private final JdbcTemplate jdbcTemplate; public UserDao(JdbcTemplate jdbcTemplate) { this.jdbcTemplate jdbcTemplate; } // 查询单条记录注意返回 null 而非异常 public User findById(Long id) { String sql SELECT id, name, email FROM users WHERE id ?; try { return jdbcTemplate.queryForObject(sql, new Object[]{id}, (rs, rowNum) - new User(rs.getLong(id), rs.getString(name), rs.getString(email))); } catch (EmptyResultDataAccessException e) { return null; // 明确处理无结果 } } // 批量插入比单条 insert 快 10 倍以上 public int batchInsert(ListUser users) { String sql INSERT INTO users (name, email) VALUES (?, ?); return jdbcTemplate.batchUpdate(sql, users.stream().map(u - new Object[]{u.getName(), u.getEmail()}).collect(Collectors.toList()) ).length; } // 事务方法必须 public 类级别代理生效 Transactional(rollbackFor Exception.class) public void transferMoney(Long fromId, Long toId, BigDecimal amount) { // 扣减 from 账户 jdbcTemplate.update(UPDATE accounts SET balance balance - ? WHERE id ?, amount, fromId); // 增加 to 账户 jdbcTemplate.update(UPDATE accounts SET balance balance ? WHERE id ?, amount, toId); // 故意抛异常测试回滚 if (amount.compareTo(new BigDecimal(1000)) 0) { throw new RuntimeException(Transfer too large); } } }参数说明queryForObject第二个参数new Object[]{id}是 SQL 参数占位符值第三个参数是RowMapper将ResultSet映射为User对象batchUpdate接收二维Object[][]或ListObject[]我们用stream().map()构造避免手动循环Transactional的rollbackFor显式指定所有异常都回滚避免RuntimeException外的异常不触发回滚。4. 避坑指南那些让你加班到凌晨三点的 JDBC 翻车现场4.1 现象启动时报java.lang.ClassNotFoundException: com.mysql.jdbc.Driver原因MySQL 5.1 驱动类名已从com.mysql.jdbc.Driver改为com.mysql.cj.jdbc.Driver而 SpringBoot 2.4 默认不再自动注册驱动必须显式配置spring.datasource.driver-class-name。若配置文件中漏写此项或写错类名就会触发此异常。解决检查application.yml中driver-class-name是否为com.mysql.cj.jdbc.Driver且mysql-connector-java依赖版本 ≥ 6.0.6对应 MySQL 5.7。4.2 现象查询中文字段返回乱码如æŽå½éšŒ原因三个层面编码不一致MySQL 服务端character_set_serverutf8mb4、数据库/表字符集utf8mb4_unicode_ci、JDBC URL 中characterEncodingutf8mb4三者缺一不可。常见错误是只改了 URL忘了执行ALTER DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;。解决登录 MySQL 执行SHOW VARIABLES LIKE character_set_%;和SHOW CREATE DATABASE testdb;确认全部为utf8mb4再检查 JDBC URL 是否含characterEncodingutf8mb4。4.3 现象LocalDateTime字段插入数据库后时间偏移 8 小时原因JVM 时区与 MySQL 时区不一致。JVM 默认用系统时区如Asia/Shanghai而 MySQLsystem_time_zone可能是CST美国中部时间导致LocalDateTime序列化时被错误转换。解决在 JDBC URL 中强制指定serverTimezoneAsia/Shanghai并在 MySQL 中执行SET GLOBAL time_zone 8:00;然后重启 MySQL 服务。4.4 现象JdbcTemplate.update()返回 0但数据库实际已更新原因SQL 中WHERE条件不匹配任何记录update()方法返回影响行数0 表示无记录被更新不是异常。新手误以为是连接失败疯狂查网络和权限。解决增加日志输出int rows jdbcTemplate.update(sql, params); log.info(Updated {} rows, rows);明确区分“更新成功 0 行”和“执行失败”。4.5 现象应用启动后首次查询极慢5 秒后续正常原因HikariCP 默认initialization-fail-timeout-1表示不初始化连接首次getConnection()时才真正建立物理连接而 MySQL 驱动首次加载需解析大量元数据。解决在application.yml中添加spring.datasource.hikari.initialization-fail-timeout1让连接池启动时就校验连接把耗时前置到启动阶段。5. 生产级验证用 3 个 Shell 脚本完成全链路冒烟测试5.1 数据库连通性自检脚本check-mysql.sh线上发布前必须验证 MySQL 服务可达、用户权限正确、字符集合规。我们提供check-mysql.sh无需 Java 环境纯 Bash 调用mysql客户端#!/bin/bash # 检查 MySQL 连通性、用户权限、字符集 HOST127.0.0.1 PORT3306 USERspringboot_dev PASSPssw0rd123 DBtestdb echo Step 1: Ping MySQL service if ! nc -z $HOST $PORT; then echo FAIL: MySQL port $PORT not reachable exit 1 fi echo Step 2: Login and check user privileges if ! mysql -h$HOST -P$PORT -u$USER -p$PASS -e SELECT 1; /dev/null 21; then echo FAIL: Cannot login with user $USER exit 1 fi echo Step 3: Verify character set CHARSET$(mysql -h$HOST -P$PORT -u$USER -p$PASS -Nse SELECT character_set_database;) if [ $CHARSET ! utf8mb4 ]; then echo FAIL: Database charset is $CHARSET, expected utf8mb4 exit 1 fi echo PASS: All checks passed使用说明chmod x check-mysql.sh ./check-mysql.sh脚本通过nc检查端口、mysql命令登录、SQL 查询变量三重验证覆盖网络、认证、配置三类故障。5.2 SpringBoot 应用健康检查脚本check-app.shSpringBoot Actuator 的/actuator/health端点返回 JSON但默认不包含数据库详情。我们源码包中已启用show-detailsalways此脚本解析 JSON 判断数据库是否 UP#!/bin/bash # 检查 SpringBoot 应用健康状态重点验证 db 状态 APP_URLhttp://localhost:8080/actuator/health echo Checking application health HEALTH_JSON$(curl -s $APP_URL) # 检查整体状态 STATUS$(echo $HEALTH_JSON | jq -r .status) if [ $STATUS ! UP ]; then echo FAIL: Application status is $STATUS exit 1 fi # 检查数据库状态需 actuator 配置 management.endpoint.health.show-detailsalways DB_STATUS$(echo $HEALTH_JSON | jq -r .components.db.status) if [ $DB_STATUS ! UP ]; then echo FAIL: Database component status is $DB_STATUS # 输出详细错误 ERROR_MSG$(echo $HEALTH_JSON | jq -r .components.db.details.error // unknown) echo Error detail: $ERROR_MSG exit 1 fi echo PASS: Application and database are UP依赖说明需提前安装jqJSON 解析工具apt install jq或brew install jq脚本用curl获取健康端点用jq提取.components.db.status字段确保数据库探针真实生效。5.3 全链路冒烟测试脚本smoke-test.sh模拟真实业务场景创建用户 → 查询用户 → 更新用户 → 删除用户。此脚本调用 SpringBoot 的 REST API验证 JDBC 操作全流程#!/bin/bash # 全链路冒烟测试CRUD 用户 API_BASEhttp://localhost:8080/api/users echo Smoke Test: Create User CREATE_RESP$(curl -s -X POST $API_BASE \ -H Content-Type: application/json \ -d {name:SmokeTestUser,email:smoketest.com}) USER_ID$(echo $CREATE_RESP | jq -r .id) if [ $USER_ID null ] || [ -z $USER_ID ]; then echo FAIL: Create user failed exit 1 fi echo Smoke Test: Get User by ID GET_RESP$(curl -s $API_BASE/$USER_ID) NAME$(echo $GET_RESP | jq -r .name) if [ $NAME ! SmokeTestUser ]; then echo FAIL: Get user returned wrong name: $NAME exit 1 fi echo Smoke Test: Update User curl -s -X PUT $API_BASE/$USER_ID \ -H Content-Type: application/json \ -d {name:UpdatedSmoke,email:updatedtest.com} /dev/null UPDATED_NAME$(curl -s $API_BASE/$USER_ID | jq -r .name) if [ $UPDATED_NAME ! UpdatedSmoke ]; then echo FAIL: Update user failed exit 1 fi echo Smoke Test: Delete User curl -s -X DELETE $API_BASE/$USER_ID /dev/null DELETE_CHECK$(curl -s $API_BASE/$USER_ID | jq -r .error // not found) if [ $DELETE_CHECK ! not found ]; then echo FAIL: Delete user failed exit 1 fi echo PASS: All smoke tests passed技术要点脚本用curl模拟 HTTP 请求jq解析响应 JSON每步都做断言失败立即退出USER_ID从创建响应中提取确保测试数据隔离删除后再次 GET 验证是否真删除避免假成功。6. 进阶技巧用 Docker Compose 一键拉起 MySQL SpringBoot 开发环境6.1 为什么不用纯 Docker因为卷挂载和时区是玄学Docker 官方 MySQL 镜像默认时区是UTC而中国开发者需要Asia/Shanghai。若只在docker run中加-e TZAsia/ShanghaiMySQL 容器内date命令显示正确但 JDBC 连接时serverTimezone参数仍需显式设置否则LocalDateTime依然错乱。更糟的是docker volume挂载宿主机目录时Linux 权限映射可能让 MySQL 无法写入data目录。我们提供的docker-compose.yml用三重保险解决version: 3.8 services: mysql: image: mysql:8.0.33 container_name: mysql-dev environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: testdb MYSQL_USER: springboot_dev MYSQL_PASSWORD: Pssw0rd123 # 关键强制容器时区为中国标准时间 TZ: Asia/Shanghai # 关键用 tmpfs 挂载避免权限问题且重启不丢失 tmpfs: - /var/lib/mysql # 关键覆盖默认启动命令显式指定时区和字符集 command: --default-authentication-pluginmysql_native_password --character-set-serverutf8mb4 --collation-serverutf8mb4_unicode_ci --time-zone08:00 ports: - 3306:3306 healthcheck: test: [CMD, mysqladmin, ping, -h, localhost, -u, springboot_dev, -pPssw0rd123] timeout: 20s retries: 10 app: build: . container_name: springboot-app depends_on: mysql: condition: service_healthy environment: # 关键JDBC URL 中 serverTimezone 必须与容器时区一致 SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/testdb?serverTimezoneAsia/ShanghaicharacterEncodingutf8mb4allowPublicKeyRetrievaltrue SPRING_DATASOURCE_USERNAME: springboot_dev SPRING_DATASOURCE_PASSWORD: Pssw0rd123 ports: - 8080:8080 # 关键应用容器也设时区保持 JVM 与 MySQL 一致 environment: - TZAsia/Shanghai参数说明tmpfs将 MySQL 数据目录挂载到内存避免宿主机权限问题且开发环境无需持久化command覆盖默认启动参数--time-zone08:00比TZ环境变量更底层healthcheck用mysqladmin ping真实检测数据库就绪而非只看端口depends_on的condition: service_healthy确保 SpringBoot 容器只在 MySQL 健康后启动。6.2 Dockerfile 构建优化跳过测试 分层缓存SpringBoot Maven 构建默认执行所有测试而开发环境无需运行单元测试可跳过加速构建。我们Dockerfile采用多阶段构建利用 Maven 本地仓库分层缓存# 构建阶段只下载依赖缓存复用率高 FROM maven:3.8.6-openjdk-17 AS builder WORKDIR /app COPY pom.xml . # 先下载依赖利用 Docker 层缓存 RUN mvn dependency:go-offline -B COPY src ./src # 跳过测试仅编译打包 RUN mvn clean package -Dmaven.test.skiptrue -B # 运行阶段精简镜像 FROM openjdk:17-jre-slim WORKDIR /app # 复制构建产物不带 Maven 和源码 COPY --frombuilder /app/target/*.jar app.jar # 暴露端口 EXPOSE 8080 # 启动命令 ENTRYPOINT [java,-Djava.security.egdfile:/dev/./urandom,-jar,app.jar]优化点mvn dependency:go-offline单独一层只要pom.xml不变该层永远命中缓存-Dmaven.test.skiptrue跳过测试编译和执行构建时间减少 60%openjdk:17-jre-slim镜像仅 120MB比openjdk:17小 300MB-Djava.security.egdfile:/dev/./urandom解决容器内SecureRandom初始化慢的问题。6.3 本地开发调试技巧IntelliJ IDEA 远程 Debug MySQL 容器当 JDBC 报错难以定位时需进入 MySQL 容器内部抓包。我们提供一键进入容器并启用 MySQL 通用日志的方法# 1. 进入 MySQL 容器 docker exec -it mysql-dev bash # 2. 启用通用日志记录所有 SQL mysql -u root -proot123 -e SET GLOBAL general_log ON; SET GLOBAL log_output TABLE; # 3. 查看最近 10 条 SQL在容器内执行 mysql -u root -proot123 -e SELECT argument FROM mysql.general_log ORDER BY event_time DESC LIMIT 10; # 4. 关闭日志避免磁盘爆满 mysql -u root -proot123 -e SET GLOBAL general_log OFF;实战经验通用日志默认输出到文件但容器内文件系统易满故设为TABLEmysql.general_log表在mysql库中需用root用户查询日志包含客户端 IP可确认 SpringBoot 容器是否真的连到了这个 MySQL 实例。从那以后我每次新建 SpringBoot 项目都强制走一遍check-mysql.sh→docker-compose up -d→smoke-test.sh三步验证哪怕只是改了个 Controller 路径。因为 JDBC 这层抽象太薄薄到一个字符集参数就能让整个服务返回乱码而这种问题永远在上线前最后一刻才爆发。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
从开题卡壳到定稿提交:我把写论文的整套工具链重做了一遍(附各阶段选工具的思路) /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 5:27:58
Safari兼容IM源码包:四端互通的WebSocket通信底座 简介:这是一套2024年亲测可部署的国产IM即时通讯系统源码,面向具备Java、OC、C#及Vue开发能力的技术人员,解决多端互通、高并发实时通信与私有化安全部署需求。资源完整覆盖安卓、iOS、PC及Web四端,基于国产tio通信框架࿰… · 2026/11/6 5:27:58
IPP协议解析:HTTP承载的二进制网络打印与任务排查 简介:这份 IPP 网络打印协议源码包面向希望理解跨平台网络打印实现、学习网络协议编程的开发者与运维人员,围绕 IPP 基于 HTTP/1.1 的请求响应机制、打印作业提交以及打印机状态与属性查询等核心场景,提供可对照研读的 C 语言实现。压缩包共 … · 2026/11/6 5:26:58
变慢变高变响亮:如何调好文字转语音TTS的pace、pitch_rate与energy_rate三旋钮 【免费下载链接】tts-fastspeech2-ljspeech 项目地址: https://ai.gitcode.com/hf_mirrors/speechbrain/tts-fastspeech2-ljspeech 点击查看 免费下载 tts-fastspeech2-ljspeech 是 SpeechBrain 提供的文字转语音(TTS)语音合成预训练模型&am… · 2026/11/6 6:18:11
【成品设计】基于单片机的家用智能浇花系统的设计与实现 V1《基于单片机的家用智能浇花系统的设计与实现》
V1功能说明:
软件功能:系统具有运行模式和设置模式,在设置模式下10秒没有操作可自动切换到运行模式。
实时显示功能:系统实时采集当前土壤湿度、水位状态、系统模式和RGB间隔并在… · 2026/11/6 6:18:11
Python基础教程:控制流与函数入门 - 第4-6天 Python基础教程:控制流与函数入门 - 第4-6天 关键要点
控制流的核心作用:条件语句和循环使程序能够根据条件做出决策并重复执行任务。函数的重要性:函数帮助组织代码,提高可读性和可维护性,是编写复杂程序的基础。适合… · 2026/11/6 6:18:11
Spyglass:CDC官方Hands-on Training(三) 相关阅读
Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 本文是对Spyglass CDC Hands-on Training中第一个实验的翻译(有删改),Lab文件可以从以下链接获取。
Spyglass CDC Hands-on Trai… · 2026/11/6 6:18:11
蓝奏云少点几下鼠标怎么做?Lanzou-Enhanced 油猴脚本使用指南 蓝奏云少点几下鼠标怎么做?Lanzou-Enhanced 油猴脚本使用指南 【免费下载链接】UserScript 🐵 自用的一些乱七八糟 油猴脚本~ 项目地址: https://gitcode.com/gh_mirrors/us/UserScript
在蓝奏云网盘后台管理文件时,有几个细节很磨人… · 2026/11/6 6:17:11
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07
三菱PLC数据采集到数据库的时序设计:Python+MC协议实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11
ASIC主模式RTL设计:状态机与三态驱动的流片级实现 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11
STM32嵌入式C++开发:GDB调试与Renode仿真实战指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07