规范团队数据库编码的核心是建立以preparedstatement为基础的统一、安全、可维护操作习惯,包括强制参数化查询、禁用字符串拼接、明确参数顺序、自动资源管理、统一异常处理、编码一致性及动态sql白名单管控。

规范团队数据库编码,核心不是“怎么写 PreparedStatement”,而是“怎么用 PreparedStatement 建立统一、安全、可维护的数据库操作习惯”。它本身不直接规定编码风格,但它是落实编码规范最关键的执行载体。真正起作用的是围绕 PreparedStatement 形成的一套协作约定。
统一使用参数化查询,禁用字符串拼接
这是最基础也最关键的规范。所有 SQL 语句必须通过 ? 占位符传参,严禁在 SQL 字符串中用 + 或 String.format 拼接用户输入或变量。
- ✅ 正确:String sql = "SELECT * FROM user WHERE status = ? AND create_time > ?";
- ❌ 禁止:String sql = "SELECT * FROM user WHERE status = '" + status + "'";
- 团队需在 Code Review 中重点检查此类拼接,尤其在日志、动态条件、IN 查询等易出错场景
明确参数索引与字段顺序的映射规则
避免因序号错位导致数据写入错误(如把邮箱写进年龄字段)。建议采用“命名占位符+注释说明”或“常量定义参数位置”方式增强可读性。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 推荐在 SQL 注释中标明参数含义:String sql = "INSERT INTO user (name, email, age) VALUES (?, ?, ?) /* name, email, age */";
- 或定义常量:private static final int IDX_NAME = 1, IDX_EMAIL = 2, IDX_AGE = 3;
- 对复杂 SQL(如多表 JOIN + 多条件),配合单元测试验证 setXxx 调用顺序与字段一一对应
强制资源自动管理与异常处理模板
统一使用 try-with-resources,禁止手动 close;统一捕获 SQLException 并转为业务异常或日志记录,不裸露原始驱动异常信息。
- 必须写成:try (Connection conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) { ... } - 禁止出现 conn.close()、ps.close() 等显式关闭语句(易遗漏或重复关闭)
- 团队共享一个 JDBC 工具类(如 JdbcUtils),封装 getConnection、executeUpdateWithLog、queryList 等方法,收口异常处理逻辑
字符编码与 SQL 安全联动规范
PreparedStatement 防注入能力依赖于底层连接的编码一致性。团队需同步约定数据库连接 URL 的编码参数,并验证实际生效。
- MySQL 连接串必须含:?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
- 建表语句统一指定 CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci(支持 emoji 和完整中文)
- 新增字段前,需确认该字段是否参与参数化查询 —— 若用于动态表名/列名(如分表字段),PreparedStatement 无法防护,必须走白名单校验或配置中心管控
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










