问题描述
我使用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
1楼
(这是一条评论,但我不能发表评论,因为没有50分)
您必须知道,在使用JSP时,scriptlet是一种不好的做法。 当您牢记代码时,请注意软件开发原则,例如DRY(不要重复自己),SRP(单一职责原则)等等。 您已将视图与域模型混合在一起,从不这样做。 这样做的唯一好处是:
- 可伸缩性差
- 维护不良
- 意大利面代码
因此,您需要通过添加一些层(控制器和模型)来重新构建应用程序。
- 创建访问数据抽象层以与您的数据(例如dao,存储库)进行通信。
- 为您的视图创建一个控制器。
- 在视图中使用JSTL以避免脚本编写。
2楼
您遇到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注入。