JDBC从零开始:Java连接MySQL的环境搭建、CRUD操作与避坑指南
我最早学MySQL的时候一直有个困惑命令行里SQL敲得飞起SELECT、INSERT、UPDATE背得滚瓜烂熟但一到Java项目里要真正读写数据库整个人就卡住了——代码里冒出来的Connection、Statement、ResultSet这些类跟命令行里那套完全是两个世界。后来自己连着折腾了几个通宵被各种报错教育过几轮才彻底搞清楚JDBC其实就是Java程序访问数据库的那座桥。这篇是系列的第一篇我打算把JDBC到底是什么、环境怎么搭、第一个连接怎么写、最基本的增删改查怎么做、以及新手绕不开的几个坑一次讲透。适合刚学完Java语法和SQL基础、准备做Web项目但还不太明白代码怎么连数据库的读者也适合平时用Navicat这类工具用得很熟、却始终没搞懂底层原理的同学。1. JDBC到底解决什么问题——从一次“访问被拒绝”的报错说起1.1 没有JDBC之前Java程序怎么访问数据库先说个容易被忽略的问题MySQL本身是一种独立的数据库服务它有自己的一套网络协议。在没有统一标准以前Java程序想访问MySQL就得按照MySQL的私有协议写通信代码想访问Oracle又得重新学一套Oracle的协议。这意味着如果你在项目里换数据库业务代码要大面积重写数据库厂商也巴不得你绑死在它的生态里。JDBC就是用来打破这种绑定的。它的全称是Java Database Connectivity核心在java.sql和javax.sql这两个包下。你可以把JDBC理解成一组接口规范它规定了Java程序要用什么方法连接数据库、用什么方法执行SQL、用什么方法读取结果。真正干活的则是各个数据库厂商提供的驱动实现MySQL对应的是Connector/JOracle对应的是Oracle JDBC驱动。你的业务代码只面向JDBC接口写底层换驱动就行。这个设计其实很像家里墙上的插座JDBC是插座标准驱动是各种设备的转换插头。你买电器不用关心发电厂在哪只要插头符合标准就能用同理你的Java代码不用关心MySQL服务内部怎么存储、怎么索引只要通过JDBC接口发SQL过去就能拿到结果。整个Java生态里JDBC的位置非常底层。你后来会接触到的MyBatis、MyBatis-Plus、Spring Data JPA这些ORM框架说到底都是在JDBC外面包了一层帮你把结果集自动映射成Java对象、把SQL语句拼装好。但框架越高级越容易让你忽略底层发生了什么。一旦遇到连接超时、结果集关闭、事务不生效这类问题不懂JDBC的人会非常被动。1.2 一个真实报错的拆解Access denied for user我第一次用Java连MySQL报的第一个错就是java.sql.SQLException: Access denied for user rootlocalhost (using password: YES)这句话看起来长其实信息量很大。Access denied表示认证失败后面括号里的using password: YES告诉你程序确实带了密码去连但MySQL认为密码不对或者当前用户没有权限从localhost这个来源登录。当时我第一反应是去改代码里的密码改了好几遍还是报错。后来才发现问题不在密码而在于我本地MySQL的root账号认证方式跟驱动默认行为不匹配。MySQL 8.0默认使用caching_sha2_password认证插件而老版本驱动默认用的认证协议对不上导致服务端拒绝连接。从这次报错里我学到一个习惯遇到JDBC报错先把整条异常信息读完尤其是Caused by部分和括号里的补充说明。很多人都是一看到SQLException就慌了直接复制到搜索引擎其实大部分错误信息已经把原因写在脸上了。JDBC的异常链通常会告诉你是连接都没建立成功还是SQL语法错了还是结果集读取姿势不对。搞清楚报错属于哪个阶段排查方向立刻清晰一半。1.3 JDBC编程的六层逻辑JDBC代码虽然琐碎但本质只有六件事加载驱动、获取连接、创建语句、执行SQL、处理结果、关闭资源。后面几章我会逐个拆开讲。这里先记住一个概念——JDBC操作的对象是分层的DriverManager负责跟驱动打交道根据URL字符串找到合适的驱动并创建连接Connection代表一条真实的数据库连接也是事务的边界Statement/PreparedStatement承载SQL语句的对象ResultSetSQL查询返回的结果集可以理解成一张虚拟表格。2. 动手前必做的环境准备——JDK、MySQL、驱动jar三件套2.1 版本搭配的讲究很多新手环境装好了却死在版本不匹配上。JDBC这边最怕的就是驱动版本和MySQL、JDK互相不兼容。我目前的推荐组合很固定场景JDK版本MySQL版本驱动依赖老项目维护JDK 8MySQL 5.7mysql:mysql-connector-java:5.1.49大多数新项目JDK 8 / 11 / 17MySQL 8.0com.mysql:mysql-connector-j:8.0.33生产环境升级JDK 17MySQL 8.0com.mysql:mysql-connector-j:8.x最新稳定版注意一个细节MySQL官方从8.0开始把驱动坐标从mysql:mysql-connector-java改成了com.mysql:mysql-connector-j。如果你在网上搜到老文章用的还是旧坐标引入依赖后会出现类冲突或者找不到驱动的情况。8.x的驱动向下兼容MySQL 5.7所以新项目直接上8.0驱动没问题但反过来用5.x驱动连MySQL 8.0就很容易报认证协议错误。JDK版本也要留意JDK 8是目前企业里最保守的选择跑Spring Boot 2.x很稳如果你用Spring Boot 3.x那就必须JDK 17以上这时候选MySQL 8.0 最新驱动最省心。2.2 Maven引入驱动还是手动下载jar我在公司带过几个新人最常见的问题是驱动jar包到底放哪儿如果你的项目用了Maven现在绝大多数Java项目都用直接在pom.xml里加dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId version8.0.33/version /dependencyMaven会自动把驱动下载到本地仓库。但不少人会遇到IDEA卡在下载、Maven一直转圈甚至报Cannot resolve com.mysql:mysql-connector-j:8.0.33。这通常是Maven中央仓库访问不稳定的问题解决方案有三种给Maven配置国内镜像例如阿里云镜像手动到MySQL官网下载驱动jar包放到项目里的lib目录然后在IDEA里右键jar包选择Add as Library或者把jar用mvn install:install-file命令装进本地Maven仓库。我个人的建议是学习阶段不用纠结Maven手动引入jar反而能加深你对classpath的理解。当年我手动把驱动jar拖进lib目录再通过IDEA添加为库折腾几次之后才真正明白“驱动的jar包必须在运行时classpath里”这句话是什么意思。等你有这个感知了再换成Maven管理依赖会顺手很多。2.3 环境自检清单环境准备最忌“闷头装装完不知道装对没有”。我每次搭完环境都会按这个顺序验证一遍在命令行执行java -version确认JDK可用且版本符合预期执行mysql -uroot -p确认MySQL服务正常、能登录用Navicat或命令行执行一条简单的SELECT 1确认网络和权限没问题在项目里写一个空类跑一次确认driver jar能被加载。如果你连命令行登录MySQL都做不到说明问题在MySQL服务本身跟JDBC无关先解决安装和账号问题再往下走。很多人JDBC连不上排查了半天最后发现MySQL服务压根没启动这个低级错误我见过不止一次。3. 第一个JDBC程序从DriverManager到Connection的完整链路3.1 标准六步为什么这么设计第一个程序不要追求花哨老老实实走完JDBC六步就好。代码如下import java.sql.*; public class JdbcDemo1 { public static void main(String[] args) throws Exception { // 1. 加载驱动 Class.forName(com.mysql.cj.jdbc.Driver); // 2. 获取连接 String url jdbc:mysql://localhost:3306/test?useSSLfalseserverTimezoneAsia/Shanghai; String user root; String password 123456; Connection conn DriverManager.getConnection(url, user, password); // 3. 创建Statement Statement stmt conn.createStatement(); // 4. 执行SQL String sql SELECT id, name, age FROM student; ResultSet rs stmt.executeQuery(sql); // 5. 处理结果集 while (rs.next()) { System.out.println(id rs.getInt(id) , name rs.getString(name) , age rs.getInt(age)); } // 6. 关闭资源 rs.close(); stmt.close(); conn.close(); } }我猜有人会问第一步Class.forName是不是已经过时了确实JDBC 4.0之后驱动jar里带了META-INF/services/java.sql.Driver这个SPI文件DriverManager会自动发现并注册驱动所以不写Class.forName也能跑。但我在教学和老项目维护时仍然建议保留这一行。理由有两个一是老驱动和某些容器环境下SPI加载偶尔会出问题显式加载更稳二是看到Class.forName能让新手明确意识到“我确实引入了MySQL驱动”排查环境问题时多一个抓手。3.2 URL里的参数都是干什么的连接串jdbc:mysql://localhost:3306/test里jdbc:mysql是协议名localhost是数据库服务器地址3306是MySQL默认端口test是数据库名。这个结构直接对应你平时用Navicat新建连接时要填的那堆东西。后面跟的参数是新手容易忽略的useSSLfalse本地开发和测试时关闭SSL加密避免一堆告警serverTimezoneAsia/Shanghai明确告诉驱动服务器时区。MySQL 8.0之前经常因为时区差导致时间字段读出来不对加了这参数基本能规避allowPublicKeyRetrievaltrue使用caching_sha2_password认证时允许客户端向服务器获取公钥。如果没加某些驱动版本会报Public Key Retrieval is not allowed。生产环境的安全策略跟本地不同。到时候useSSL应该打开并且配置证书本地为了图省事可以暂时关掉但心里要清楚这只是在学习场景下的妥协。3.3 连接报错表和排查顺序第一个程序最容易在“获取连接”这一步翻车。我把最常见的几个错误整理成了表格方便你对号入座报错信息大概率原因解决方向java.sql.SQLException: Access denied for user...用户名、密码错误或账号权限不足核对账号密码确认root是否允许从localhost登录java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed未加allowPublicKeyRetrievaltrue在URL中追加该参数java.sql.SQLException: No suitable driver found驱动jar没在classpath或URL格式写错检查依赖是否引入确认jdbc:mysql://开头Communications link failureMySQL服务未启动或端口、地址不对telnet测试端口检查MySQL服务状态java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver驱动类名写错或jar未引入确认8.x驱动使用新类名排查顺序也很有讲究先确认服务能不能连命令行mysql -uroot -p试一下再确认驱动是否加载写一行System.out.println(DriverManager.getDrivers())打印已注册驱动最后才去抠代码细节。乱猜乱改只会让问题更乱。4. 写CRUD前必须搞懂的Statement与ResultSet4.1 Statement执行SQL的三种套路Statement执行SQL有三种方式很多人只记住了executeQuery后面遇到我明明执行的是DELETE为什么返回ResultSet这种问题就懵了。executeQuery(sql)专门执行SELECT返回ResultSetexecuteUpdate(sql)执行INSERT、UPDATE、DELETE这类会产生影响行数的语句返回int表示有多少行被改了execute(sql)万能方法返回boolean。返回true说明执行后能拿到ResultSet这时用getResultSet()取返回false说明执行的是更新类语句用getUpdateCount()取影响行数。日常开发里CRUD最常用的是前两个。execute一般在存储过程或不确定SQL类型时才会用到学习阶段知道有这么个东西就行。Statement还支持批处理一次性执行多条SQLstmt.addBatch(INSERT INTO student(name, age) VALUES(李四, 21)); stmt.addBatch(INSERT INTO student(name, age) VALUES(王五, 22)); int[] results stmt.executeBatch();results数组里每个元素对应一条SQL的影响行数。批处理能明显减少和数据库的交互次数批量导入数据时非常有用。4.2 ResultSet游标机制next()到底做了什么ResultSet是最容易让新手迷惑的对象。它并不像Java里List那样一次性把所有数据装进内存而是一个带游标的虚拟结果集。初始状态下游标指向第一行之前next()每调用一次游标向下移动一行当游标越过最后一行时next()返回false循环结束。所以查询的遍历代码永远是这种形状while (rs.next()) { // 取当前这一行的字段 }取字段时可以用列索引也可以用列名。列索引从1开始不是0很多人第一次写rs.getString(0)直接下标越界。推荐用列名代码更可读但列名必须和SQL查询结果的列名一致。这里的列名不是指数据库表里的原始字段名而是你SELECT后的字段名。比如你写了SELECT age AS a FROM student那rs.getInt(a)才对。如果事先不知道结果集有哪些列可以用ResultSetMetaData动态获取ResultSetMetaData meta rs.getMetaData(); int columnCount meta.getColumnCount(); for (int i 1; i columnCount; i) { System.out.println(meta.getColumnName(i) - meta.getColumnTypeName(i)); }这个技巧在写通用报表工具、或对接动态查询需求时能救命。4.3 一个带“返回自增主键”的插入案例很多在线实训平台比如教育类的JDBC关卡考的都是“插入用户数据并获取自增ID”。这是一个非常实用、但教科书很少强调的操作。JDBC里要让自增主键能返回插入时得给createStatement传一个参数Statement stmt conn.createStatement( ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY ); stmt.executeUpdate( INSERT INTO student(name, age) VALUES(赵六, 23), Statement.RETURN_GENERATED_KEYS ); ResultSet keys stmt.getGeneratedKeys(); if (keys.next()) { System.out.println(生成的主键是 keys.getLong(1)); }RETURN_GENERATED_KEYS是给MySQL发指令执行完插入后把自动生成的ID返回给客户端。这在后续业务里特别常用比如插入订单后要根据订单ID继续插入订单明细没有这个功能就得再查一次数据库。写到这里我想强调一句第4章的代码我故意用Statement而不是PreparedStatement。并不是推荐你这么写而是希望你先把Statement的两个致命弱点看清楚。第一个弱点是SQL注入第二个弱点是SQL无法预编译、重复执行效率低。等你看清楚痛点下一章再引入PreparedStatement印象会深刻得多。5. 我第一次踩过的坑驱动类找不到、SSL警告、资源没关闭5.1 ClassNotFoundException先从jar包查起java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver是个经典报错几乎每个新手都会碰到。它的本质是JVM在classpath里找不到这个类。所以排查思路非常直接——先确认驱动jar到底有没有进到classpath。用IDEA的话按CtrlAltShiftS打开Project Structure在Modules里看依赖列表里有没有mysql-connector-j。如果Maven依赖已经添加却没有生效先刷新Maven或者把本地仓库里的jar删掉重新下载。另一个容易踩的是驱动类名写错。MySQL 5.x驱动类和8.x驱动类不一样5.x用的是com.mysql.jdbc.Driver8.x改成了com.mysql.cj.jdbc.Driver。你如果在网上抄了一段老代码又把驱动升级到了8.x就会报类找不到。对照当前驱动版本用对应的类名问题立刻解决。5.2 被无数人忽略的SSL和时区告警连上数据库之后控制台可能会刷出一堆英文告警最著名的是WARNING: Establishing SSL connection without servers identity verification is not recommended别慌这不是报错。原因是MySQL 8.0默认启用SSL但本地开发者一般没配证书驱动为了让你能连就降级到不加密通信同时打出一段警告。解决方式就是在URL里加useSSLfalse。但我要多提醒一句这只是学习/开发环境的做法生产环境请老老实实打开SSL别为了省事把安全底线也省掉。还有一个跟时区相关的经典坑不加serverTimezone参数可能报The server time zone value йʱ is unrecognized。本质上是因为MySQL服务器时区配置和驱动不一致。在URL里写上serverTimezoneAsia/Shanghai或者修改MySQL全局时区参数都能解决。这类参数的坑最烦人因为它们不影响“能不能连上”只影响“某些功能对不对”。我建议把常用参数组合当成模板背下来jdbc:mysql://localhost:3306/test?useSSLfalseallowPublicKeyRetrievaltrueserverTimezoneAsia/ShanghaicharacterEncodingutf85.3 资源没关闭连接泄漏比你想的严重很多人写第一个JDBC程序拿到结果就结束了根本不关连接。本地跑了几次也没啥感觉但连接数是有限的。MySQL默认最大连接数也就一百多个你每跑一次程序泄漏一个连接用不了多久数据库就拒绝新连接了报错通常长这样java.sql.SQLException: Too many connections我记得自己有一次在测试环境反复重启程序突然连不上数据库排查到最后发现就是代码里Connection没关连接全被占满了。重启MySQL只能临时解决治标不治本。正确的做法是保证ResultSet、Statement、Connection按顺序关闭。Java 7之后最简单的方式是直接用try-with-resourcestry (Connection conn DriverManager.getConnection(url, user, password); Statement stmt conn.createStatement(); ResultSet rs stmt.executeQuery(sql)) { while (rs.next()) { // 处理数据 } } catch (SQLException e) { e.printStackTrace(); }try-with-resources的好处是无论正常结束还是抛异常资源都会自动关闭你不用再担心忘记写close()。这也是我后来给团队定下的代码规范凡是实现了AutoCloseable的JDBC资源能用try-with-resources就不用手动关。6. 下一步该学什么——从“能跑”到“能上线”6.1 为什么我坚持下一章才讲PreparedStatement顺着上一章留下的悬念这里我先点一下。Statement最大的问题是SQL字符串靠拼接。比如你写String name 张三 OR 11; String sql SELECT * FROM student WHERE name name ;如果这个name来自用户输入攻击者可以直接改写成恒真条件把整张表查出来。这就是最经典的SQL注入。而PreparedStatement用?占位符 参数绑定从机制上避免了拼接注入的风险同时SQL可以预编译循环执行时效率更高。我遇到不少培训班出来的同学一上来就背PreparedStatement怎么用问他“为什么不用Statement”答不上来。所以这个系列里我特意把PreparedStatement放到第二篇就是为了让你先理解它解决的是什么问题。下一篇会带你写完整的PreparedStatement版CRUD还会对比预编译原理。6.2 连接池与事务留给系列后续到这一步你已经能用原生JDBC写完一套CRUD。但如果你把它直接用到生产环境马上会碰到另一个问题每次请求都新建一个数据库连接开销太大。因为创建Connection本质上要跟MySQL完成TCP握手、认证、分配资源并发一上来系统就撑不住了。解决办法是引入连接池比如HikariCP把连接复用起来。另外真实的业务操作经常要跨多条SQL保证一致性比如转账时的“扣款”和“加款”必须同时成功或同时失败。JDBC里通过conn.setAutoCommit(false)开启事务再在合适的时机commit()或rollback()。这是很多初级开发容易翻车的点——不是语法不懂而是不知道事务边界应该画在哪里。关于事务和连接池的细节我会在系列后面用专门篇幅展开。第一篇能跑通连接、看懂CRUD你已经具备了继续深入的基础。最后再分享一个个人习惯我刚学JDBC那会儿会专门建一个本地测试库里面放一张简单的student表每次摸索新API之前先在这张表上跑一遍。因为驱动版本、参数配置、环境状态都会影响结果有一个能反复折腾的实验环境学起来会快很多。下一章我们继续聊PreparedStatement和真正的增删改查落地写法。

相关新闻

Transformers 库实战指南:从模型加载到 Pipeline 避坑全覆盖

Transformers 库实战指南:从模型加载到 Pipeline 避坑全覆盖

这几年做 NLP 相关项目,如果你还没用过 Hugging Face 的 Transformers 库,那确实有点跟不上节奏了。很多人以为 Hugging Face 只是提供了一个下载模型的网站,但实际上,Transformers 库本身已经成为自然语言处理领域的事实标准工具…

2026/10/11 6:45:25 阅读更多 →
gin-vue-admin 仓库结构关系全览:根目录职责、前后端分层与插件对称架构指南

gin-vue-admin 仓库结构关系全览:根目录职责、前后端分层与插件对称架构指南

后端前端认证鉴权低代码任务调度 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,支持TS和JS混用。它集成了JWT鉴权、权限管理、动态…

2026/10/11 6:45:25 阅读更多 →
AI Agent驱动的竞品价格监控与智能日报系统

AI Agent驱动的竞品价格监控与智能日报系统

1. 项目概述:这不是一个“爬虫定时任务”的老套路,而是一套能自己思考、判断、写报告的竞品价格监控系统你有没有过这种体验:每天早上打开电脑第一件事,就是挨个点开五六个竞品页面,手动记下SKU价格、促销标签、库存状…

2026/10/11 6:45:24 阅读更多 →

最新新闻

社区生鲜配送系统:基于SSM的Java毕设设计与实现

社区生鲜配送系统:基于SSM的Java毕设设计与实现

1. 为什么说社区生鲜配送是2026年毕设的“高性价比”选题又到了毕业设计选题的季节。每年这个时候,总有一批同学在“做什么题目”上反复纠结——太简单的怕过不了答辩,太复杂的怕自己写不完。如果你正处在Java技术栈的学习阶段,同时想找一个既…

2026/10/11 8:54:42 阅读更多 →
SSM+Vue健身房管理系统毕设全解析:从架构设计到答辩指南

SSM+Vue健身房管理系统毕设全解析:从架构设计到答辩指南

1. 技术选型分析:SSMVue这套组合为什么能撑起一套毕设1.1 SSM三件套各自的本职工作先说结论:SSM不是单个框架,而是Spring、SpringMVC、MyBatis三个框架的组合代称。在很多老牌软件工程、信息管理类专业的课程体系里,SSM是教学主线…

2026/10/11 8:54:42 阅读更多 →
Codex实战:排查并清理C盘AppData的87.81GB占用

Codex实战:排查并清理C盘AppData的87.81GB占用

开头先放一个场景:某天下午我正写着代码,右下角突然弹出提示,C盘空间不足。我下意识打开资源管理器一看,233GB的C盘只剩不到5GB,整个盘标红得像警报灯。第一反应肯定是东西太多该清理了,但问题在于&#xf…

2026/10/11 8:54:42 阅读更多 →
AI编程工具节省Token实战:Codex与Claude Code的上下文管理指南

AI编程工具节省Token实战:Codex与Claude Code的上下文管理指南

聊到 AI 编程工具,Codex 和 Claude Code 这两兄弟应该没人陌生。身边不少朋友试过一次后,反馈出奇一致:好用,但费 token,看着控制台的用量统计唰唰往上跳,心里真的会咯噔一下。其实我用了大半年&#xff0c…

2026/10/11 8:54:42 阅读更多 →
图解AI应用架构设计:五层模型与实操画法指南

图解AI应用架构设计:五层模型与实操画法指南

1. 为什么“图解”才是AI应用架构设计的正确打开方式做AI应用架构设计这些年,我最大的感受是:画不清楚的架构,一定讲不明白;讲不明白的架构,大概率也落不了地。很多团队在项目启动会上拿着一份几十页的文字方案&#x…

2026/10/11 8:54:42 阅读更多 →
AI正在悄悄“架空”高阶人士:决策降维与判断力退化深度剖析

AI正在悄悄“架空”高阶人士:决策降维与判断力退化深度剖析

1. 从三个瞬间说起:AI带来的不只是便利,还有隐性的侵蚀上个月在咖啡馆,隔壁桌坐着一个做跨境电商的老板,手机里开着某AI对话应用,眉头紧锁地在问:“帮我分析一下这个季度的广告数据,为什么转化率…

2026/10/11 8:53:41 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →