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

用户注册凭证未写入PostgreSQL数据库问题求助

我创建了register.jsp文件以及对应的Java类RegisterCommand,并编写了注册逻辑,但用户输入的凭证并未写入PostgreSQL数据库。相关代码如下:

String userEmail = req.getParameter("userEmail");
String userPassword = req.getParameter("userPassword");

try {
    Class.forName("org.postgresql.Driver");// Load Drivers for DB
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}


try (Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "postgres")) {
    PreparedStatement statement = connection.prepareStatement(SQL_ADD_USER);
    statement.setString(1, userEmail);
    statement.setString(2, userPassword);
    statement.executeUpdate();

} catch (SQLException exception) {
    throw new RuntimeException("add user failed", exception);
}

CommandUtil.goToPage(req, resp, "/WEB-INF/view/register.jsp");
排查与解决建议
  • 确认SQL语句正确性:检查SQL_ADD_USER对应的INSERT语句,确保列名和数据库表完全匹配,语法无错误(比如字段数和占位符数量一致、没有遗漏逗号或括号)。
  • 验证请求参数:在执行数据库操作前,打印userEmail和userPassword的值,确认是否成功从请求中获取到有效数据,而非null或空字符串。
  • 检查事务提交:虽然try-with-resources会自动关闭连接并触发提交,但如果代码中存在手动设置connection.setAutoCommit(false)的情况,需要显式调用connection.commit()完成事务。
  • 查看数据库日志:前往PostgreSQL的日志目录(通常为data/pg_log)查看执行日志,里面会包含SQL执行时的具体错误信息,比Java栈追踪更精准。
  • 权限与表名验证:确认postgres用户拥有目标表的INSERT权限;同时注意PostgreSQL对标识符的大小写规则——如果表/列名创建时用了大写,SQL语句中需要用双引号包裹(如"UserEmail"),否则会被自动转为小写导致匹配失败。
  • 完善异常日志:当前catch块仅抛出RuntimeException,建议在catch中打印完整的SQL异常栈信息,方便直接定位数据库层面的错误:
    catch (SQLException exception) {
        exception.printStackTrace();
        throw new RuntimeException("add user failed", exception);
    }
    

内容的提问来源于stack exchange,提问作者Andrew Metlitskyi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:07:52