当前位置: 代码迷 >> java >> 将用户数据从JSP插入Postgres数据库
  详细解决方案

将用户数据从JSP插入Postgres数据库

热度:40   发布时间:2023-07-25 19:14:01.0

我使用JSP创建了用户信息的注册表格。 我想在提交表单后将用户数据插入到postgre数据库中带有userinfo的表中。 但是,与其向表中添加数据,还不如给我带来错误。 请帮我!

<%

    String fname = request.getParameter("fname");
    String lname = request.getParameter("lname");
    String email = request.getParameter("email");
    String user = request.getParameter("uname");    
    String pwd = request.getParameter("pass");
    String pwd2 = request.getParameter("pass2");


    Class.forName("org.postgresql.Driver");
    Connection con = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/UserInformation", "postgres", "123456789");
    PreparedStatement st = con.prepareStatement("insert into userinfo(firstname, lastname, email, username, password) VALUES ('" + fname + "','" + lname + "','" + email + "','" + user + "','" + pwd + "'");


    //ResultSet rs;
    int i = st.executeUpdate();

    if (i > 0) {
        response.sendRedirect("welcome.jsp");
    } else {
        response.sendRedirect("login.jsp");
    }
%>

输出为:

org.postgresql.util.PSQLException: ERROR: syntax error at end of input
  Position: 142

(这是一条评论,但我不能发表评论,因为没有50分)

您必须知道,在使用JSP时,scriptlet是一种不好的做法。 当您牢记代码时,请注意软件开发原则,例如DRY(不要重复自己),SRP(单一职责原则)等等。 您已将视图与域模型混合在一起,从不这样做。 这样做的唯一好处是:

  • 可伸缩性差
  • 维护不良
  • 意大利面代码

因此,您需要通过添加一些层(控制器和模型)来重新构建应用程序。

  • 创建访问数据抽象层以与您的数据(例如dao,存储库)进行通信。
  • 为您的视图创建一个控制器。
  • 在视图中使用JSTL以避免脚本编写。

您遇到sql语法错误,'在插入查询的末尾删除逗号和单引号( ,'

int i = st.executeUpdate("insert into userinfo(firstname, lastname, email, username, password, city, province, country) VALUES ('" + fname + "','" + lname + "','" + email + "','" + user + "','" + pwd + "','" + city + "','" + province + "','" + country + "'");

另外,请使用PreparedStatement而不是Statement以避免SQL注入。