为什么不将来自servlet的数据插入到sql数据库中?

问题描述 投票:1回答:2
html file
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <title>hi</title>
 </head>
  <body>
  <form action="Try.java" method="get" >
  name: <input type="text" name="name" ></input>
  <input type="submit" name="submit" value="submit" style="color: blue">
  </form>
  </body>
   </html>



servlet code
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection; 
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse;

 public class Try extends HttpServlet {

  private static final long
  serialVersionUID = 1L;      
  Connection con;
  Statement stm;

   public Try() {
   super();
          }


protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, 
IOException {

    res.setContentType("text/html");    
    PrintWriter out=res.getWriter();
     try {      
      String pname=req.getParameter("name");
      Class.forName("oracle.jdbc.driver.OracleDriver");
      System.out.println("driver loaded"); 
      String url="jdbc:oracle:thin:@an-PC:1525/orclg"; 
      Connection
      con=DriverManager.getConnection(url,"user","pass");
      out.println("connection"+con);    
      Statement stm=con.createStatement();  
      String sql="Insert into name(names)values('"+pname+"')";      
      stm.executeUpdate(sql);
      System.out.println("Record inserted.....");       
      con.close();
    } catch (ClassNotFoundException e) {        
      // TODO Auto-generated catch block        
      e.printStackTrace();  
    } catch (SQLException e) {
        // TODO Auto-generated catch block      
      e.printStackTrace();  }
      }

      protected void doPost(HttpServletRequest request,HttpServletResponse response) throws 
      ServletException, IOException {

  }    
}
 following are the Exceptions

java.lang.ClassNotFoundException:oracle.jdbc.driver.OracleDriver在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)在java.lang.Class.forName0(本地方法)在java.lang.Class.forName(Class.java:259)在Try.doGet(Try.java:41)在javax.servlet.http.HttpServlet.service(HttpServlet.java:617)在javax.servlet.http.HttpServlet.service(HttpServlet.java:723)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)在org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)在org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:606)在org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)在java.lang.Thread.run(Thread.java:745)

java html servlets oracle10g
2个回答
1
投票

您应该学习解释堆栈跟踪。堆栈跟踪的第一行表示Java运行时无法找到类oracle.jdbc.driver.OracleDriver。这是Oracle JDBC驱动程序类。

因此获得Oracle driver JAR并将其放在Web应用程序的WEB-INF/lib文件夹中。

虽然:为了防止SQL injection attacks,您永远不要通过字符串操作使用未转义的请求参数创建SQL。请改用准备好的语句。并且不要忘记关闭语句并提交事务。

PreparedStatement stm = con.prepareStatement("insert into name (names) values (?)");  
stm.setString(1, pname);
stm.executeUpdate();
con.commit();
stm.close();

这将自动转义引号等字符。另外,您应该在插入之前验证该值(例如,不超过100个字符,具体取决于名称列的长度)。


0
投票

此声明可能是您的问题:

String sql="Insert into name(names)values("+"'pname')"; 

我认为引号应如下:

String sql="Insert into name(names)values('"+pname+"')"; 

0
投票

java.lang.ClassNotFoundException:oracle.jdbc.driver.OracleDriver,您将OracleDriver添加到库中并再次运行

© www.soinside.com 2019 - 2024. All rights reserved.