如何实现code字段唯一性校验?避免输入数据库已存在值
解决code字段重复验证的问题
核心逻辑修正
你之前的代码逻辑存在错误——你拿当前对象的code和输入的code做对比,这两个值本身就是同一个,自然永远触发不了异常。正确的逻辑应该是:
- 从数据库中根据输入的code查询是否存在已有记录
- 如果查询到存在对应记录,再抛出重复异常
示例代码(JDBC场景)
假设你用JDBC操作数据库,代码可以这么写:
// 假设inputCode是用户输入的编码 String inputCode = ...; // 编写查询语句,统计对应code的记录数 String sql = "SELECT COUNT(*) FROM your_table WHERE code = ?"; try (Connection conn = getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, inputCode); ResultSet rs = pstmt.executeQuery(); if (rs.next() && rs.getInt(1) > 0) { // 查到已有记录,抛出异常 throw new RuntimeException("该编码已存在"); } } catch (SQLException e) { // 处理数据库查询异常 throw new RuntimeException("验证编码重复时出错", e); }
示例代码(MyBatis场景)
如果用MyBatis这类ORM框架,先在Mapper接口定义查询方法:
public interface CfopMapper { Integer countByCode(String code); }
对应的XML查询语句:
<select id="countByCode" resultType="java.lang.Integer"> SELECT COUNT(*) FROM cfop WHERE code = #{code} </select>
然后在业务代码中调用验证:
String inputCode = ...; Integer count = cfopMapper.countByCode(inputCode); if (count != null && count > 0) { throw new RuntimeException("该编码已存在"); }
额外建议
- 为避免并发场景下的重复插入,建议给数据库的
code字段添加唯一约束,形成代码+数据库的双重验证 - 异常信息用中文表述会更友好,比如“该编码已存在”
内容的提问来源于stack exchange,提问作者Mariana Cagnoni
相关产品推荐
相关产品推荐

