自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

专注 Java 生态

专注 Java 技术栈的资深开发工程师,深耕 Spring Boot / Spring Cloud / MyBatis 企业级微服务架构,熟悉 JVM 调优、并发编程与分布式系统设计。博客记录一线开发踩坑经验与技术思考,用代码解决真实问题。

  • 博客(94)
  • 资源 (16)
  • 收藏
  • 关注

原创 star-blog项目介绍

star-blog 是基于 Spring Boot 2.7.7 的社区论坛系统,集成文章发布、话题讨论、评论互动、付费内容与支付宝支付等功能。采用 Thymeleaf 渲染,结合 Redis 与 Guava 双层缓存、Elasticsearch 全文搜索、Kafka 异步处理及阿里云 OSS 图片存储,实现高性能与高可用。通过 Shiro 权限管理与敏感词过滤保障安全,具备完整的分层架构与 139+ 个 Java 文件,支持权限控制、异步索引、评分算法与图片自动压缩,构建了功能完备、稳定高效的在线社区平台。

2026-10-24 23:20:15 118

原创 AI翻译助手-JWT与redis无状态认证

本文提出“JWT + Redis”混合认证方案,兼顾无状态扩展性与主动失效能力。JWT负责身份验证,确保可分布式部署;Redis存储登录态,实现登出、改密等即时失效功能。通过拦截器双重校验(JWT签名+Redis存活),并结合ThreadLocal安全传递用户上下文,避免串号风险。关键点:密钥不硬编码、ThreadLocal必清理、放行路径精准。既保留JWT优势,又弥补其缺陷,是生产可用的平衡之选。

2026-10-21 08:26:15 221

原创 AI翻译助手-JWT与redis无状态认证

本文提出“JWT + Redis”混合认证方案,兼顾无状态扩展性与主动失效能力。JWT 负责身份验证,安全传递用户信息;Redis 存储登录态,实现登出、改密等即时失效场景。通过拦截器双重校验(JWT 签名+Redis 存活),结合 Header/Cookie 双传参方式,保障安全性与灵活性。强调密钥配置安全、ThreadLocal 必须清理、放行路径精准,避免串号风险。最终实现高效、可控、可扩展的认证体系。

2026-10-20 08:40:07 18

原创 AI翻译助手-会员加点数

本文介绍智能翻译产品采用“订阅+用量”混合计费模型,通过会员配额与点数账本协同,实现公平、灵活的收费机制。点数按1000字符或每页文档扣除,规则配置化便于调整;扣费优先级为先点数后配额,避免用户付费点数浪费;翻译失败时自动退款,保障用户体验;同时联动缓存避免重复扣费。核心理念:让计费透明可预期,赢得用户信任。

2026-10-19 08:28:58 131

原创 AI翻译助手-延时取消订单

做会员订阅有个绕不开的场景:用户下单后 30 分钟内没付款,订单要自动取消。听着简单,实现方式大有讲究。定时任务扫表的话,每隔几分钟扫一次「未支付且超时」的订单,数据量大时扫表压力大,时效性也差;数据库轮询类似,轮询间隔就是最大误差。我选了第三种——RocketMQ 的延时消息,下单时发一条「30 分钟后消费」的消息,到点自动触发取消,精准、低耦合。

2026-10-08 14:56:49 203

原创 AI翻译助手-三级缓存设计

翻译系统因无界缓存导致内存溢出(OOM),通过引入Caffeine实现三级缓存策略:翻译结果(TTL 1小时,1万条)、语言检测(TTL 30分钟,5千条)、支持语言列表(TTL 1小时,100条),分别配置容量与过期时间。结合@Primary避免与Redis缓存冲突,拆分缓存逻辑至独立Service规避自调用失效问题,并实现命中缓存不扣费的计费联动,兼顾性能、成本与稳定性。

2026-10-08 14:54:24 196

原创 ShipDesk前端Nginx独立发布教程

本文分享了将前端发布流程集成至 ShipDesk 的实践:通过构建 dist、版本化存储、Nginx 配置校验与自动切换,实现前端一键发布与自动回滚。关键在于分离前后端发布逻辑,设计合理的目录结构(如 current/previous/releases),避免 Docker 软链接问题,并确保 Nginx 配置校验在切换前完成。最终达成无需停机、可回滚、独立发布的高效部署方案。

2026-09-22 14:53:43 270

原创 Docker Nginx 配置 Let’s Encrypt 免费 SSL 证书

本文教程基于CentOS 7部署Nginx Docker容器,通过Certbot webroot模式为域名787k.fun申请Let’s Encrypt免费SSL证书。需确保域名解析正确、端口开放,并配置Nginx临时监听80端口以支持ACME验证。申请时使用certbot certonly --webroot,将证书文件挂载至容器,最终实现HTTP自动跳转HTTPS,完成安全访问配置。

2026-09-21 17:34:58 217

原创 ShipDesk 完整使用教程:从新建项目到 SSH 自动发布

ShipDesk 是一款本地优先的 Linux 发布工作台,专为简化 Java JAR 项目发布而设计。通过配置服务器信息、构建命令与远程路径,用户只需点击“开始发布”,即可自动完成构建、上传、校验、切换版本、启动及健康检查,支持失败后自动回滚。适用于单台服务器的自动化部署,推荐使用 SSH 密钥登录,提升安全性与效率。

2026-09-20 19:09:50 365

原创 AI翻译助手-SSE实时对话翻译

本文详解SSE在实时对话翻译中的应用,强调其相比WebSocket的轻量与高效。核心在于“心跳保活”与“资源清理”:通过Long.MAX_VALUE超时+定时心跳维持连接,守护线程避免阻塞;三种结束信号均触发清理,防止内存泄漏。流式推送采用分片延时模拟打字效果,但需使用专用线程池避免阻塞。作者坦承当前为“模拟流式”,非真正增量输出,提醒开发者认清技术边界——工程权衡重于炫技,清晰认知比盲目追求真流式更重要。

2026-09-18 09:17:35 184

原创 AI翻译助手:七种格式的文档翻译策略工厂

本文介绍如何用策略模式与工厂模式实现七种文档格式(PDF、Word、Excel、PPT、TXT等)的高效翻译。核心设计:统一byte[]接口,按扩展名分发策略,确保格式保留与异常兜底。以PDF为例,流程为提取→批量翻译+数字行过滤→回写,支持异步处理与按页计费。关键细节包括失败重试、原文兜底、进度回调,保障生产级稳定性。

2026-09-14 16:16:10 180

原创 AI翻译助手-RAG检索增强翻译

本文介绍如何通过RAG技术解决大模型翻译中术语不一致、记忆缺失的问题。核心方案包括:两级术语检索(关键词匹配与全文包含匹配)、历史翻译记忆复用、Embedding相似度重排筛选,以及术语前置替换(如[[Order]])强制一致性。通过知识库检索增强生成,结合优雅降级机制,显著提升翻译的准确性与风格统一性,实现专业级翻译效果。

2026-09-12 13:31:30 74

原创 Redis生产环境redis-conf配置教程

本文系统讲解Redis生产环境核心配置,涵盖持久化(RDB/AOF)、安全认证、内存管理、连接限制与高风险命令禁用等关键点。通过redis.conf逐项解析,强调数据安全、性能优化与故障防护,提供启动验证方法,适用于内网部署与学习参考,建议根据实际场景调整参数。

2026-09-10 17:14:09 268

原创 AI翻译助手-双引擎翻译路由

本文分享了构建高效翻译系统的核心策略:融合机器翻译(如阿里云)与大模型(如通义千问),通过统一接口、场景化路由与三级降级机制,实现“快”与“准”的平衡。关键在于:业务层无需感知引擎差异,按需选择;外部依赖失败时,逐级降级至Mock,保障系统可用性;同时避免降级结果缓存,防止错误持久化。最终打造了一个稳定、智能、可扩展的翻译架构。

2026-09-10 15:06:41 207

原创 AI翻译助手-持久层设计

<think>用户希望我根据提供的博客文章生成一篇≤150字的文章摘要。让我提炼关键点。 文章要点: 持久层:MyBatis-Plus 持久层实践 BaseMapper 省去样板 CRUD 代码 LambdaQueryWrapper 优雅处理复杂查询 分页插件和乐观锁的一行配置 枚举用数字值+TypeHandler落库 持久层职责纯粹,便于维护和替换 我需要生成约150字的摘要。让我先写再数数。

2026-09-08 17:02:14 357

原创 AI智能助手-六层架构解耦

<think>我们根据要求生成一个≤150字的文章摘要。内容关于AI翻译系统为什么拆成六层。摘要要概括核心:六层职责、依赖规则、分层好处与代价。语言简洁。现在写摘要。</think>摘要:系统拆为六层加契约层,各层职责单一:接入、编排、领域、技术设施、支付、持久化。依赖自上而下,禁止反向。分层应对变化:换引擎只改业务层,加支付渠道靠注册表零改动,换存储只动持久化。代价是初期样板代码多,适合复杂易变模块,简单场景不必硬套。分层是为变化留接口,划清边界是最划算的投资。

2026-09-07 09:53:31 202

原创 AI翻译助手:开篇

<think>我们根据内容生成摘要,要求≤150字。摘要需涵盖项目名称、技术栈、功能。注意简洁。</think>基于Spring Boot 3.5的多语言智能翻译系统,支持文本/文档/实时对话翻译、术语库、质量评估、会员点数、扫码支付及技术文档站。集成通义千问、阿里云翻译、MyBatis-Plus、Redis、RocketMQ、MinIO等,采用SSE流式输出,实现RAG重排。

2026-09-06 16:39:04 362

原创 从 0 到 1 搭建项目,技术负责人的技术选型怎么做?

今天聊一个被写烂、却很少有人讲透的话题:**作为技术负责人,从 0 到 1 做技术选型,你到底在做什么选择?**我先给结论:**技术负责人的选型,本质上不是「选哪个技术强」,而是「选哪种风险你承担得起」。**

2026-08-29 07:31:59 256

原创 把一条业务线从 0 做到上线后,我提了离职

摘要: 一位技术人回顾入职一年来的经历:从接手半成品项目到独立推动业务上线,在资源匮乏、质疑不断的困境中完成从0到1的突破。最终因职场政治(功劳被攫取、负面评价蔓延)选择离开,但带走了真挚的同事关系与成长感悟。核心教训:技术人需学会主动展示价值,"活儿不会替自己说话";离职需理性权衡,不建议冲动裸辞。文末强调兑现承诺的坦然,并给出务实建议——现金流不足者应骑驴找马,情绪激动时延迟决策72小时。 (149字)

2026-08-21 10:26:05 198

原创 DeepSeek-V4-Pro 实测避坑

文章摘要: 作者实测DeepSeek-V4-Pro在代码验收工作流中的表现,发现其存在严重缺陷。该模型自主完成9轮验收Loop,均标记为“通过”,并提交代码。然而实际运行时出现关键错误,问题恰是模型反复“验收通过”的部分。复盘显示,模型倾向于审查表层问题(如命名规范),却忽略逻辑漏洞(如SQL拼接错误),且将“未发现问题”等同于“验收通过”。最终,作者指出“便宜模型”可能因漏检导致更高隐性成本,建议复杂任务优先选用可靠的高级模型。 (字数:149)

2026-08-17 11:48:17 318

原创 告别「接口文档 = 口口相传」:我用 Claude Code Skill 把 API 文档生成做到了「代码即真相」

摘要(149字) 该工具通过代码逆向生成精准API文档,解决人工编写易错、遗漏的问题。以美团OTA接口为例: 全链路可视化:自动生成含分支逻辑的时序图 错误场景穷举:映射下游错误码并标注源码依据 智能对比:高亮相似接口的差异点(如限流策略) 严格溯源:区分代码确认字段与推断字段,杜绝模糊表述 产出包含Markdown文档(含Mermaid流程图)和Postman集合,确保文档与代码100%同步,尤其适合处理混合数据格式(如URL编码嵌套JSON)的复杂接口场景。

2026-08-07 10:40:26 2277

原创 11、发布系统-用户认证与权限体系

本文摘要了一个基于Servlet Session和ThreadLocal的轻量级认证架构,用于内部发布系统。核心组件包括AuthFilter(登录拦截器)、CurrentUserHolder(用户上下文存储)、UserInfoAdapter(用户信息适配器)和权限判断工具。AuthFilter拦截所有请求,处理公开路径、已登录和未登录三种情况,并通过Session校验用户身份。CurrentUserHolder利用ThreadLocal存储当前用户信息,确保线程安全。

2026-08-04 21:52:12 280

原创 告别 AI 编码混乱:我用一个 Skill 串起了“需求→交付“全流程

Terry-Goal 是一个为 Claude Code 设计的全流程开发编排器,通过九阶段流水线解决AI编码中需求模糊、设计缺失、质量失控等问题。

2026-08-02 15:13:32 289

原创 尘封十余年的歌词,AI 帮我一夜之间圆了音乐梦——《忘川》创作全记录

一位程序员用AI将尘封十多年的原创诗词《忘川》转化为完整歌曲并发布至网易云音乐。文章讲述了从大学时期创作到借助AI音乐工具实现音乐梦的全过程:选择支持古风的中文AI工具,经过歌词整理、风格选择、生成微调等步骤,仅用三分钟就完成作曲编曲。作者分享了对AI演唱的情感细腻度不足的小遗憾,以及技术突破创作壁垒的惊喜,认为AI的伟大在于帮助普通人实现艺术表达。

2026-08-02 11:30:40 248

原创 10、发布系统-路由管理与灰度发布

本文介绍了发布系统的路由管理机制,通过摘除流量、部署后恢复流量的方式实现不停服发布。核心思路包括:部署前从负载均衡摘除目标机器,等待已有请求处理完毕,完成部署后再恢复流量。系统采用策略模式支持iptables和HTTP路由中心两种流量控制方式,配置灵活。部署流程中嵌入路由管理,确保异常时仍尝试恢复流量,并记录操作日志。iptables策略直接操作防火墙规则,HTTP策略则调用外部API。这种机制有效避免了部署期间的请求丢失,保障用户体验。

2026-08-02 11:13:14 380

原创 9、发布系统-Webhook自动发布

本文介绍了发布系统的Webhook自动发布机制,通过监听GitLab代码推送事件实现"git push即发布"。系统采用异步处理架构,核心流程包括:TriggerController接收Webhook请求并快速响应;TriggerService进行事件过滤和分支匹配,通过PublishRelation关联业务与分支;使用LinkedBlockingQueue削峰并异步消费任务,最终由AsyncDeploy执行部署。该设计避免了同步阻塞,确保高并发下的稳定性,同时简化了开发者的发布流程,提升了多团队协作效率。

2026-07-25 17:32:50 231

原创 8、发布系统-完整流水线的核心

文章摘要 本章详细阐述了异步发布流水线的核心实现,重点分析了AsyncDeploy.deploy()方法的完整流程。该系统采用Spring异步任务机制,通过12个依赖服务和多个配置项构建了灵活的发布架构。核心流程包含10个关键步骤:从状态设置、数据校验开始,经过代码同步、打包构建、制品查找等环节,最后完成解压部署。系统特别考虑了不同类型项目(Java/JAR/Angular)的处理差异,并内置了路径安全校验等防护机制。整个流程通过数据库状态更新实现异步通信,既保证了发布效率又确保了系统安全性。

2026-07-24 15:45:13 367

原创 7、发布系统-SSH 时代的自动化

本文介绍了基于SSH的远程部署引擎实现,核心是JSchUtil工具类,封装了SSH连接、命令执行和文件传输功能。该工具类通过判断目标主机是否为本地地址进行分流,本地执行使用ProcessBuilder启动子进程,远程执行则基于JSch库实现。远程执行采用双线程并行读取stdout和stderr,避免管道阻塞,并支持多种认证方式的自动降级策略。整个设计注重可靠性(超时保护、结果回填)和兼容性(认证策略)

2026-07-23 22:08:02 358

原创 6、发布系统-从源码到制品

文章摘要 本章介绍了发布系统中的构建模块,重点围绕WarService的设计实现。该系统通过packWar和packWar2两个入口方法分别处理独立打包和打包+发布两种场景,确保状态管理的一致性。核心构建流程包括Maven可执行文件的多路径探测(优先使用配置路径,其次尝试常见安装位置),以及四步构建流水线:Git代码同步、打包命令确定、构建执行和制品记录。该设计兼顾了不同环境下的兼容性和构建流程的可控性。

2026-07-21 17:58:03 379

原创 5、发布系统-Git 集成

摘要 本文介绍了发布系统中Git集成的核心设计,重点阐述了GitService组件的实现原理与优化策略: 双层抽象架构:底层GitService处理本地仓库操作(clone/fetch/checkout),上层GitLabService通过API与GitLab交互。 智能缓存机制: 首次构建全量clone,后续增量fetch 本地磁盘作为一级缓存减少网络开销。

2026-07-20 13:21:05 262

原创 4、发布系统MyBatis-Plus 持久层实现

本文介绍了MyBatis-Plus在publish系统中的持久层实现方案。系统采用统一架构:所有实体继承BaseEntity基类,Mapper接口继承BaseMapper并配合@Select注解实现查询,Service层基于ServiceImpl构建。文章详细阐述了自增主键设计、注解SQL风格的优势、动态SQL处理技巧以及统计查询返回Map的实践。整个持久层保持高度一致性,超过半数的Mapper仅使用继承的CRUD方法,通过lambdaQuery覆盖简单条件查询,避免了重复代码。

2026-07-18 11:40:15 206

原创 3、发布系统-数据库设计与领域实体

发布系统:数据库设计与领域实体

2026-07-16 09:02:41 345

原创 2、发布系统-项目骨架

本章介绍了发布系统的Maven多模块架构设计,将系统划分为四个层次清晰的子模块: publish-justgotrip-domain:核心领域层,包含纯POJO实体和枚举定义,不依赖其他模块。 publish-justgotrip-persistent:持久层,基于MyBatis-Plus实现数据库访问,与表一一对应。 publish-justgotrip-business:业务核心层。

2026-07-15 12:00:48 257

原创 1、为什么要自己造发布系统

文章摘要 本文分析了微服务架构下传统发布流程的五大痛点:手动操作易出错、多环境配置混乱、发布过程不可视、多服务依赖难管理、回滚困难。评估了Jenkins和GitLab CI等现有方案的局限性后,提出了自研发布系统的解决方案。该系统聚焦五个核心环节:Git版本管理(增量更新)、构建打包(多项目支持)、部署同步(rsync增量传输)、远程重启(多类型支持)和验证通知,实现了发布流程的自动化、可视化和可追溯。系统通过本地缓存、增量同步等优化显著提升发布效率,解决了微服务架构下的发布管理难题。

2026-07-13 22:37:27 385

原创 vibecoding发布系统

JustGoTrip 发布系统是一个面向研发团队的自动化发布平台,提供完整的代码部署解决方案。系统支持一键打包部署、灰度滚动发布、版本回滚等功能,并与GitLab Webhook深度集成实现自动触发部署。技术栈基于Java 21和Spring Boot 3.x,采用Nacos作为配置中心,支持MySQL数据库和Redis缓存。系统包含领域层、持久层、业务层和应用层四层架构,核心模块化设计。提供开发、测试、生产等多环境支持,具备SSH远程操作、HTTP预热检查、磁盘空间监控等运维特性等

2026-07-11 20:37:58 398

原创 RocketMQ 5.1.0 + Dashboard Docker 生产部署方案

RocketMQ 5.1.0 + Dashboard Docker 生产部署方案,架构:单 NameServer + 单 Broker(已知单点风险,资源受限下的生产取舍) ,鉴权:Broker ACL (plain_acl.yml) + Dashboard 凭证

2026-07-11 09:19:00 565

原创 别再让 AI 猜你用什么技术栈了!手把手教你优化 Claude Code 前端子代理

摘要 本文介绍了如何优化Claude Code的子代理系统,特别是针对前端开发的frontend-developer子代理。文章指出默认子代理配置存在技术栈不明确、缺乏项目规范、目录结构不清等问题,并提供了详细的优化方案。 优化过程包括: 明确项目类型(Web管理后台+UniApp小程序) 选定UI组件库(Element Plus和uView Plus) 确定状态管理(Pinia) 规范代码结构和技术栈 分步骤优化子代理配置文件 最终配置采用单文件分区法,分别针对Web和小程序项目设置技术栈、目录结构、代码

2026-07-01 06:50:05 393

原创 从零设计一个发布系统

文章摘要(147字) 本文从开发者实际痛点出发,系统性地拆解了发布系统的设计思路。首先通过手工发布流程分析,提炼出构建、传输、重启等6个核心阶段。随后明确了系统边界,聚焦开发者场景而非运维工具。核心部分提出了Biz-App-Task-Flow-Pack五层数据模型,重点阐释了策略选择器、乐观锁、反范式化等关键设计决策。文章强调从用户场景而非技术出发的设计方法,并揭示了流程可见性、异常处理等容易被忽视的细节,为构建企业级发布系统提供了清晰的思维框架。

2026-06-27 14:41:19 445

原创 OpenSpec实战

OpenSpec是一个规范驱动开发工具,通过结构化文档让AI更好地理解需求,解决长prompt效果差和重复解释项目背景的问题。它采用迭代式开发,通过Delta Specs记录需求变更,归档后AI可直接读取。核心工作流包括propose(生成方案)、apply(执行实现)、archive(归档变更)三步。实战案例展示了如何用OpenSpec优化Expedia酒店详情处理性能,将查询次数从500次降至1次,吞吐提升3-5倍。关键点包括明确"不做什么"、记录技术决策理由、量化验收标准等。

2026-06-09 14:51:09 271

原创 Fish Knowledge Base 2.0 完全教程

本文介绍了Fish Knowledge Base 2.0知识管理系统,这是一个AI驱动的混合知识管理平台。系统采用五层架构(100-raw原始输入层、200-wiki知识层、300-schema配置层、400-output导出层、500-life个人创作层),实现AI自动整理与人工创作的完美区隔。核心功能包括自动知识提取、智能关联、隐私保护(AI绝不扫描500-life私人空间)和四合一命令系统(/ter等)。文章详细说明了各层目录结构、文件规范和工作流程,提供了一个完整的知识管理解决方案。

2026-06-08 19:46:51 264

orcal数据库论文

大学生结课数据库论文,自己撰写再加上摘抄

2013-11-29

基于jsp网络购物

代码没有问题,请放心下载,里面有详细代码

2013-07-03

solr ssm java

自己弄的一个maven项目 框架ssm 改改配置就能用 搭建文档我已经加到了压缩包 有不懂的可以问 windows下搭建的solr 跟linux步骤差不多

2016-12-22

jdk8-mac.zip

现在csdn上很多mac版的jdk8要的积分特别多,动辄几十分,真是不明觉厉,这个版本是本人在用的jdk8,正常可用,放心下载!如果喜欢请多多评论,留下你们的红心,谢谢!即便资源共享,也请不要做拿来主义者!

2020-05-21

echarts java实例

物超所值 适合初学者 前后台数据成功交互 傻瓜式配置 记得好评

2016-12-27

generator_sql.zip

最近公司好多功能都进行了配置性操作,需要像数据库中插入数据,通过ongl表达式进行计算即可,每次复制粘贴和更改sql内容感觉特别麻烦,所以就通过读取excel表的数据就行sql生成操作.这样的话眼睛没有以前那么累了,也不容易发生错误了,省时省力.

2020-05-21

数据库实验完整版 通讯录

package main; import java.awt.Color; import java.awt.Font; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.*; public class addWind implements ActionListener { private JFrame wind; //定义保存用户输入的姓名 private String getname; //定义标签数组 private JLabel[] lbArray={ new JLabel("请输入您要新增的信息内容:"), new JLabel("姓 名:"), new JLabel("性 别:"), new JLabel("出生日期:"), new JLabel("手机号码:"), new JLabel("MSN/QQ:"), new JLabel("现在住址:"), new JLabel("家 乡:"), new JLabel("关 系:"), new JLabel("备 注:")}; //定义文本域数组 private JTextField[] jtfArray={ new JTextField(), new JTextField(30), new JTextField(30), new JTextField(30), new JTextField(30), new JTextField(30), new JTextField(30), new JTextField(30), new JTextField(30), new JTextField(30) }; private JButton btn,btn2; //构造函数 public addWind() { wind = new JFrame("新增通讯信息页面"); wind.setSize(600,600); btn = new JButton("确认添加"); btn2 = new JButton("返回"); wind.setLayout(null); btn.setBounds(220,500,100,30); btn2.setBounds(360,500,100,30); wind.add(btn); wind.add(btn2); addComponent(); addListener(); Image icon = Toolkit.getDefaultToolkit().getImage("./image/test.PNG"); wind.setIconImage(icon); wind.setVisible(true); //wind.setBackground(Color.red); wind.setLocationRelativeTo(null); wind.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { int temp = JOptionPane.showConfirmDialog(wind, "您是要退出系统,还是返回登录?", "请选择退出或者登录?", JOptionPane.WARNING_MESSAGE); if(temp==0) { System.exit(0); }else { wind.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); } } }); } public void addComponent() { lbArray[0].setFont(new Font("楷体",Font.BOLD+Font.ITALIC,22)); lbArray[0].setForeground(Color.red); lbArray[0].setBounds(100,10,800,20); for(int i=1;i<10;i++) { lbArray[i].setBounds(60,i*50,150,30); lbArray[i].setFont(new Font("楷体",Font.BOLD,20)); lbArray[i].setForeground(Color.blue); jtfArray[i].setBounds(210,i*50,300,30); wind.add(jtfArray[i]); } for(int i=0;i<10;i++) { wind.add(lbArray[i]); } } //注册监听器 public void addListener() { btn.addActionListener(this); btn2.addActionListener(this); for(int i=0;i<10;i++) { jtfArray[i].addActionListener(this); } } //实现ActionListener接口 public void actionPerformed(ActionEvent e) { if(e.getSource()==btn) { //点击更新按钮的操作 getname=jtfArray[1].getText().trim(); System.out.println("test:"+getname); if(getname!=null&&!getname.equals("")) { //拼装SQL语句 String sql = "select name from memoData where name='"+getname+"';"; System.out.println("要更新姓名是:"+getname); DBTool.initialConnect(); if( DBTool.checkData(sql,getname,wind)); { //定义正则表达式,验证电话号码有效性 String parten="1[3|5|8]\\d{9}"; String uname=jtfArray[1].getText().trim(); String sex=jtfArray[2].getText().trim(); String birth=jtfArray[3].getText().trim(); String mobile=jtfArray[4].getText().trim(); if(mobile.matches(parten)) { }else { JOptionPane.showMessageDialog(wind, "您输入的电话号码有误,请检查后再试。", "温馨提示:", JOptionPane.WARNING_MESSAGE); return ; } String msn=jtfArray[5].getText().trim(); String address=jtfArray[6].getText().trim(); String home=jtfArray[7].getText().trim(); String extend=jtfArray[8].getText().trim(); String others=jtfArray[9].getText().trim(); //拼装SQL语句 sql="insert into memoData values('"+uname+"', "+ "'"+sex+"',"+"'"+birth+"', "+"'"+ mobile+"' ,"+"'"+msn+"', "+"'"+address+"' ,"+"'" +home+"', "+"'"+extend+"' ,"+"'"+others+"');"; DBTool.initialConnect(); DBTool.insertData(sql,wind); } }else { JOptionPane.showMessageDialog(wind, "姓名不能为空哦。。", "温馨提示:", JOptionPane.WARNING_MESSAGE); } }else if(e.getSource()==btn2) { //点击返回按钮的操作 new MainWind(); wind.dispose(); }else if(e.getSource()==jtfArray[0]) { jtfArray[1].requestFocus(true); }else if(e.getSource()==jtfArray[1]) { jtfArray[2].requestFocus(true); }else if(e.getSource()==jtfArray[2]) { jtfArray[3].requestFocus(true); }else if(e.getSource()==jtfArray[3]) { jtfArray[4].requestFocus(true); }else if(e.getSource()==jtfArray[4]) { jtfArray[5].requestFocus(true); }else if(e.getSource()==jtfArray[5]) { jtfArray[6].requestFocus(true); }else if(e.getSource()==jtfArray[6]) { jtfArray[7].requestFocus(true); }else if(e.getSource()==jtfArray[7]) { jtfArray[8].requestFocus(true); }else if(e.getSource()==jtfArray[8]) { jtfArray[9].requestFocus(true); }else if(e.getSource()==jtfArray[9]) { btn2.requestFocus(true); } } }

2013-07-03

c++在线评分系统

将题目的目录放到d盘的netdisk文件夹中,用到阿帕奇(tomcat)服务器。

2014-10-10

java100种算法

对于学好java帮助很大 ,不下载会后悔,我也是从别人那拿过来的哦

2013-07-02

网上购物车 大三实验 今天刚做完

package com.toolsbean; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DB { private Connection con; private PreparedStatement pstm; private String user="orich"; private String password="123456"; private String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"; private String url="jdbc:sqlserver://localhost:1433;DatabaseName=db_shopcar"; public DB(){ try{ Class.forName(driver); System.out.println("加载驱动成功"); }catch(ClassNotFoundException e){ System.out.println("加载数据库驱动失败!"); e.printStackTrace(); } } public Connection getCon(){ if(con==null){ try { con=DriverManager.getConnection(url,user,password); } catch (SQLException e) { System.out.println("创建数据库连接失败!"); con=null; e.printStackTrace(); } } return con; } /** *@功能:对数据库进行增、删、改、查操作 *@参数:sql为SQL语句;params为Object数组,里面存储的是为sql表示的SQL语句中"?"占位符赋值的数据 */ public void doPstm(String sql,Object[] params){ if(sql!=null&&!sql.equals("")){ if(params==null) params=new Object[0]; getCon(); if(con!=null){ try{ System.out.println(sql); pstm=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); for(int i=0;i<params.length;i++){ pstm.setObject(i+1,params[i]); } pstm.execute(); }catch(SQLException e){ System.out.println("doPstm()方法出错!"); e.printStackTrace(); } } } } /** * @功能:获取调用doPstm()方法执行查询操作后返回的ResultSet结果集 * @返回值:ResultSet * @throws SQLException */ public ResultSet getRs() throws SQLException{ return pstm.getResultSet(); } /** * @功能:获取调用doPstm()方法执行更新操作后返回影响的记录数 * @返回值:int * @throws SQLException */ public int getCount() throws SQLException{ return pstm.getUpdateCount(); } /** * @功能:释放PrepareStatement对象与Connection对象 */ public void closed(){ try{ if(pstm!=null) pstm.close(); }catch(SQLException e){ System.out.println("关闭pstm对象失败!"); e.printStackTrace(); } try{ if(con!=null){ con.close(); } }catch(SQLException e){ System.out.println("关闭con对象失败!"); e.printStackTrace(); } } public static void main(String[] args) { new DB(); } }

2013-07-10

b/s版聊天室

此聊天代码运行与tomcat服务器上,下载后只需要将该代码拷贝到安装tomcatC盘目录中,tomcat已经在此文档中!

2014-03-25

jsp企业进销存管理系统

尽情下载,放心使用,该代码没有错误,适用于做课设的同学!

2013-07-03

jsp网上购物系统

值得拥有,放心下载做课设很有帮助!该代码必须用myeclipse打开

2013-07-03

网络安全des加密算法

适用于大学网络安全实验,代码全,可以直接编译,附有实验报告及截图

2013-09-03

网络安全试验des算法c++

针对于大学网络专业网络安全实验,代码实用,保证无误!

2013-09-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除