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

Java插入MySQL数据库数据失败,求代码修改实现数据存储

修复Java插入MySQL数据的问题

嘿,我来帮你梳理下代码里的问题,一步步把它改好~

核心问题拆解

  • 用错了SQL执行方法:你现在用executeQuery()来执行INSERT语句,这个方法只适合跑SELECT查询类的语句,增删改这类DML操作得用executeUpdate(),它会返回受影响的行数,能帮你确认插入是否成功。
  • SQL语句不完整+安全隐患:你的SQL被截断了,而且直接用Statement拼接参数容易触发SQL注入漏洞,换成PreparedStatement预编译语句更安全,还能避免拼写错误。
  • 资源没妥善收尾:Connection、Statement这些数据库资源用完没关闭,容易造成连接泄漏,建议用Java 7+支持的try-with-resources语法,自动帮你关闭资源,不用手动写finally。

修改后的完整代码示例

private Class nextPage;

@OnEvent(component="submitButton")
Object onSubmitFromSubmitButton() {
    String flag = "";
    String jndiname = "jdbc/TestDB";
    // 这里替换成你实际从表单获取的参数,比如通过组件getValue()拿值
    String numeRecenzor = "测试用户"; 
    int nivelIncr = 3; 

    try (InitialContext ctx = new InitialContext();
         DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/" + jndiname);
         Connection con = dataSource.getConnection();
         // 用?作为参数占位符,避免SQL注入
         PreparedStatement pstm = con.prepareStatement("INSERT INTO recenzii (numeRecenzor, nivelIncr) VALUES (?, ?)")) {

        // 给占位符赋值,注意索引从1开始
        pstm.setString(1, numeRecenzor);
        pstm.setInt(2, nivelIncr);

        // 执行插入操作,获取受影响的行数
        int affectedRows = pstm.executeUpdate();
        if (affectedRows > 0) {
            flag = "数据插入成功";
            // 这里可以加成功后的逻辑,比如跳转到结果页
        } else {
            flag = "数据插入失败";
        }

    } catch (NamingException | SQLException e) {
        // 实际项目里建议用日志框架记录异常,别直接printStackTrace
        e.printStackTrace();
        flag = "插入出错:" + e.getMessage();
    }

    return nextPage;
}

额外提醒

  • 记得把代码里的numeRecenzor、nivelIncr替换成你从表单组件实际获取的参数值。
  • 如果需要保证数据一致性,可以在获取Connection后开启事务,插入成功就提交,失败则回滚。
  • 异常处理别只打印堆栈信息,最好给用户返回友好的错误提示,同时用日志工具记录详细异常。

内容的提问来源于stack exchange,提问作者Alina Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:37:38