2012-06-29 75 views
0

我打電話的,我想在數據庫中插入數據形式的行動InserStudent.jsp文件從AddStudent.jspjava.sql.SQLException:[Microsoft] [ODBC Microsoft Access> Driver]參數太少。預計1

我的數據庫表的結構如下:

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:發生處理JSP頁/web/InserStudent.jsp例外,在第27行

24:語句語句= c.createStatement();
25:字符串SQL = 「插入到學生(ID,NAME,RollNumber,******中國,StudyProgram,狀態)」;
26:SQL + =「值( ' 「+南+」', ' 「+南+」', ' 「+滾+」', ' 「+電話+」', ' 「+ PROG +」', 「+ stats +」)「;

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> Driver]參數太少。預計1 注意根源的完整堆棧跟蹤是是Apache Tomcat/6.0.35 logs.javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

我是什麼可用失蹤或我做錯了什麼?在ShowAllStudent.jsp頁面,它顯示了我使用相同腳本的數據庫中的所有數據。

+0

還可以編輯下面的代碼爲** **的Class.forName但它也does'not工作 '的Class.forName( 「sun.jdbc.odbc.JdbcOdbcDriver中」)的newInstance();' – mobi001

+3

http://en.wikipedia.org/wiki/SQL_injection – BalusC

+0

感謝名單@BalusC爲 – mobi001

回答

1

我得到了我因此未亞姆什麼遺漏在控制面板 - >管理工具配置我的數據庫......

所以,當我把它它只是工作:)

1

你不應該寫在JSP Java代碼(讀這麼常見問題 - How to avoid Java Code in JSP)。您必須添加Servlet才能執行數據庫操作。

除了這個,你必須學會​​API的JDBC工作和@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) {} 
    } 
} 

附註:如果列ID是自動生成編號,則不包括在您的列集中。

String sql="insert into students (NAME,RollNumber,PhoneNumber,StudyProgram,Status) 
        Values (?,?,?,?,?)"; 
+0

感謝給我指了指@AVD對我指了指我在查詢出錯了 – mobi001

相關問題