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
相关产品推荐
相关产品推荐

