2012-07-30 62 views
1

爲什麼錯誤? 我該怎麼辦? 我將Java EE(jsdk)和classes12添加到intellij,並將其添加到tomcat的lib目錄中。 這是DataAccessLayer。在JSP中提交表單例外

public class DataBase { 
    private Connection connection; 
    private PreparedStatement statement; 

    public DataBase() throws ClassNotFoundException, SQLException { 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "SYSTEM", "1234"); 
    } 

    public void insertOrUpdateOrDelete(String sqlQuery) throws SQLException { 
     statement = connection.prepareStatement(sqlQuery); 
     statement.executeUpdate(); 
    } 

    public ResultSet select(String sqlQuery) throws SQLException { 
     statement = connection.prepareStatement(sqlQuery); 
     ResultSet resultSet = statement.executeQuery(); 
     return resultSet; 
    } 

    public void disconnect() throws SQLException { 
     statement.close(); 
     connection.close(); 
    } 
} 

這類從數據庫類使用。

public class Users { 
DataBase dataBase; 
    public Users() throws ClassNotFoundException, SQLException { 
     dataBase = new DataBase(); 
    } 

    public void addUser(HttpServletRequest request) throws SQLException { 

     String sqlQuery = "insert into users (name,family,email,tel,password) values('" + request.getParameter("name") + "','" + request.getParameter("family") + "','" + request.getParameter("email") + "','" + request.getParameter("tel") + "','" + request.getParameter("password") + "')"; 
     dataBase.insertOrUpdateOrDelete(sqlQuery); 
     dataBase.disconnect(); 
    } 

這是我的記數JSP頁面。 我檢查哪個用戶點擊了提交按鈕並保存在數據庫中。

<% 
     if (request.getParameter("name") != null) { 
      try { 
       Users user = new Users(); 
       user.addUser(request); 

      } catch (Exception error) { 
       error.printStackTrace(); 

      } 

     } 

%> 
     <form id="RegisterForm" action="Regist.jsp" method="post"> 
      <div> 
       <div class="wrapper"> 
        <div class="bg"><input type="text" class="input" name="name"/></div> 
        Name:<br/> 
       </div> 
       <div class="wrapper"> 
        <div class="bg"><input type="text" class="input" name="family"/></div> 
        Family:<br/> 
       </div> 
       <div class="wrapper"> 
        <div class="bg"><input type="text" class="input" name="email"/></div> 
        E-mail:<br/> 
       </div> 
       <div class="wrapper"> 
        <div class="bg"><input type="password" class="input" name="password"/></div> 
        Password:<br/> 
       </div> 
       <div class="wrapper"> 
        <div class="bg"><input type="text" class="input" name="tel"/></div> 
        Tel:<br/> 
       </div> 


       <input Class="button1" type="submit" value="SUBMIT"/> 
       <input Class="button1" type="reset" value="RESET"/> 

      </div> 
     </form> 

,但我有例外

Exceptions : 
java.sql.SQLException: ORA-01400: cannot insert NULL into ("SYSTEM"."USERS"."ID") 

    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:304) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:271) 
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:625) 
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:181) 
    at oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows(T4CPreparedStatement.java:791) 
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1032) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2884) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:2956) 
    at airAgency.DataBase.insertOrUpdateOrDelete(DataBase.java:24) 
    at airAgency.Users.addUser(Users.java:24) 
    at org.apache.jsp.Regist_jsp._jspService(Regist_jsp.java:125) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:619) 
+2

世界上所有的圖書館都不會修正與數據有關的錯誤。另外,你已經將你的'User'類明確地綁定到servlet規範,這沒有多大意義。 (和你的'DataBase'實現,但這是一個不同的問題。)和boooo,scriptlets。 – 2012-07-30 21:53:10

回答

4

錯誤信息說明是什麼問題:

cannot insert NULL into ("SYSTEM"."USERS"."ID") 

你必須在用戶表中的非空列名爲ID ,但是你不會在這個列中插入任何東西,所以數據庫會抱怨。另外,你的代碼是以錯誤的方式使用預處理語句的完美例子,因此會受到SQL注入攻擊。您的查詢應該有參數,它應綁定:

insert into users (name,family,email,tel,password) values(?, ?, ?, ?, ?) 

例如,如果我的名字是奧賴利,您的查詢將失敗,語法錯誤。這是潛在問題中最少的。

閱讀關於JDBC tutorial中已準備好的陳述。

+0

Oracle中的My Id列定義了序列。我不想手動初始化。我該怎麼辦? – HFDev 2012-07-31 16:46:28

+0

您需要執行查詢以獲取序列下一個值('從雙重'選擇mysequence.nextval'),並插入返回的ID。你可以在單個查詢中做到這一點:'插入用戶(ID,名稱,...)值(mysequence.nextval,?,...)' – 2012-07-31 16:51:16