You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java执行SQL插入语句时日期字符串被篡改问题求助

解决SQL插入时日期字符串被篡改的问题

嘿,我一眼就看出问题所在了——你现在用字符串拼接SQL语句的方式插入数据,这不仅有严重的SQL注入风险,还正是导致日期字符串被篡改的根源!

为什么会出现日期篡改?

当你直接把date变量拼进SQL里时,会遇到两个致命问题:

  • 如果date的格式和数据库期望的日期格式不匹配(比如数据库要求yyyy-MM-dd,但你的变量是MM/dd/yyyy),数据库解析时会自动转换甚至解析错误,看起来就像是日期被篡改了;
  • 要是date里包含特殊字符(比如单引号、斜杠),会破坏SQL语句的结构,导致数据库错误解析参数,甚至触发SQL注入攻击。

正确的解决方案:使用PreparedStatement

Java操作数据库时,PreparedStatement是处理参数化查询的标准安全方式,它会自动帮你处理参数转义、格式匹配的问题,彻底避免这类错误。改写后的代码如下:

try {
    // 用占位符?代替直接拼接变量
    String sql = "INSERT INTO days VALUES(?, ?)";
    PreparedStatement pstmt = DBHelper.conn.prepareStatement(sql);
    
    // 根据数据库字段类型设置参数
    // 如果数据库日期字段是DATE类型,推荐转换为java.sql.Date类型插入
    // 示例1:如果date是String类型且格式符合数据库要求(比如'yyyy-MM-dd')
    pstmt.setString(1, date);
    // 示例2:如果date是java.util.Date类型,转成SQL日期
    // pstmt.setDate(1, new java.sql.Date(date.getTime()));
    
    // 设置整数参数
    pstmt.setInt(2, num);
    
    // 执行插入操作
    pstmt.executeUpdate();
} catch (SQLException xc) {
    xc.printStackTrace();
}

额外提示

  • 确保你的date变量格式和数据库日期字段的格式完全匹配(比如MySQL的DATE字段要求yyyy-MM-dd格式);
  • 永远不要用字符串拼接的方式构造SQL语句,这是Java数据库操作的大忌,除了数据异常,还会引发严重的安全问题。

内容的提问来源于stack exchange,提问作者Diabolic Vincent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:27:31