0

データベースにデータを挿入したい場所から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

タイプ例外レポート

メッセージ

サーバーで内部エラー () が発生したため、この要求を実行できませんでした。

例外

org.apache.jasper.JasperException: 行 27 で JSP ページ /web/InserStudent.jsp を処理中に例外が発生しました

24: ステートメント statement = c.createStatement() ;
25: String sql = "insert into students (ID, NAME, RollNumber, PhoneNumber, StudyProgram, Status )";
26: sql += "values ( '"+ nam +"','"+ nam +"','"+ roll +"','"+ phone +"','"+ prog +"',"+統計 +" )";

27: ステートメント.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 > Driver] パラメータが少なすぎます。予想される 1. 注 根本原因の完全なスタック トレースは、Apache Tomcat/6.0.35 の logs.javax.servlet.http.HttpServlet.service(HttpServlet.java:717) で入手できます。

何が欠けているのか、何が間違っているのか? ページにはShowAllStudent.jsp、同じスクリプトを使用するデータベースからのすべてのデータが表示されます。

4

2 に答える 2

1

Javaコードを記述しないでJSPください(SO FAQを読む-JSPでJavaコードを回避する方法)。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 (?,?,?,?,?)";
于 2012-06-29T01:56:36.283 に答える
1

コントロール パネルの [管理ツール] でデータベースを構成しなかったため、不足しているものを取得しました...

だから私はそれを設定すると、それはちょうど動作します:)

于 2012-07-02T00:12:36.857 に答える