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

时间:2015-07-30 18:52:56

标签: java database postgresql jsp

我使用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

2 个答案:

答案 0 :(得分:2)

  

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

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

  • 可扩展性差
  • 维护不善
  • 意大利面条代码

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

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

答案 1 :(得分:0)

你有一个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注入。