我正在调用来自InserStudent.jsp
的表单的AddStudent.jsp
文件
从我想要在数据库中插入数据。
我的数据库表的结构如下:
ID|Name|RollNumber|PhoneNumber|StudyProgram|Status
以下是InserStudent.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<body>
<%
String nam=request.getParameter("stuname");
String roll=request.getParameter("sturoll");
String phone=request.getParameter("stuphone");
String prog=request.getParameter("stuprogram");
String stats=request.getParameter("stustatus");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:stdProjectDataDSN";
Connection c = DriverManager.getConnection(url);
Statement statement = c.createStatement() ;
String sql = "insert into students (ID, NAME, RollNumber, PhoneNumber, StudyProgram, Status )";
sql += "values ( '"+ nam +"','"+ nam +"','"+ roll +"','"+ phone +"','"+ prog +"',"+ stats +" )";
statement.execute ( sql );
c.close();
response.sendRedirect("ManageAllStudent.jsp");
%>
</body>
</html>
这会导致以下异常:
HTTP状态500
输入例外报告
消息
description服务器遇到内部错误(),导致无法完成此请求。
例外
org.apache.jasper.JasperException:在第27行处理JSP页面/web/InserStudent.jsp时发生异常
24:声明声明= c.createStatement();
25:String sql =“插入学生(ID,NAME,RollNumber,PhoneNumber,StudyProgram,Status)”; 26:sql + =“values('”+ nam +“','”+ nam +“','”+ roll +“','”+ phone +“','”+ prog +“',”+统计+“)”;27:statement.execute(sql);
28:c.close(); 29: 30:response.sendRedirect(“ManageAllStudent.jsp”);堆栈跟踪: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:521) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:412) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
根本原因
javax.servlet.ServletException:java.sql.SQLException:[Microsoft] [ODBC Microsoft Access&gt;驱动程序]参数太少。预期1。 注意Apache Tomcat / 6.0.35 logs.javax.servlet.http.HttpServlet.service(HttpServlet.java:717)中提供了根本原因的完整堆栈跟踪
我错过了什么或我做错了什么?在ShowAllStudent.jsp
页面中,它显示了我使用相同脚本的数据库中的所有数据。
答案 0 :(得分:1)
您不应该在JSP
中编写Java代码(阅读SO FAQ - How to avoid Java Code in JSP)。您必须添加Servlet
才能执行数据库操作。
除此之外,您还必须了解JDBC API的工作原理,并且@BalusC评论说您的代码是sql注入漏洞的受害者。要避免SQL注入,请使用PrepreadStatement(参数化查询)。
Connection cn=null;
PreparedStatement ps=null;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:stdProjectDataDSN";
Connection c = DriverManager.getConnection(url);
try{
String sql="insert into students (ID,NAME,RollNumber,PhoneNumber,StudyProgram,Status)
Values (?,?,?,?,?,?)";
ps=cn.prepareStatement(sql);
ps.setInt(1,10);
ps.setString(2,nam);
...
ps.executeUpdate()
}catch(SQLException ex){
}finally{
if(ps!=null){
try { ps.close(); } catch(Exception ex) {}
}
if(cn!=null){
try { cn.close(); } catch(Exception ex) {}
}
}
PS:如果列ID
是自动生成号,则不要包含在列集中。
String sql="insert into students (NAME,RollNumber,PhoneNumber,StudyProgram,Status)
Values (?,?,?,?,?)";
答案 1 :(得分:1)
我得到了iam缺少我没有在控制面板中配置我的数据库 - &gt;管理工具......
因此,当我设置它时,它只是工作:)