为什么不将servlet中的数据插入sql数据库? html文件 你好 姓名: servlet代码 导入java.io.IOException; 导入java.io.PrintWriter; 导入java.sql.Connection; 导入java.sql.DriverManager; 导入java.sql.SQLException; 导入java.sql.Statement; 导入javax.servlet.ServletException; 导入javax.servlet.http.HttpServlet; 导入javax.servlet.http.HttpServletRequest; 导入javax.servlet.http.HttpServletResponse; 公共类Try扩展了HttpServlet{ 私有静态最终长 serialVersionUID=1L; 连接con; 报表stm; 公共审判{ 超级(); } 受保护的void doGet(HttpServletRequest-req,HttpServletResponse-res)抛出ServletException, IOException{ res.setContentType(“文本/html”); PrintWriter out=res.getWriter(); 试试{ 字符串pname=req.getParameter(“名称”); 类forName(“oracle.jdbc.driver.OracleDriver”); System.out.println(“驱动程序加载”); String url=“jdbc:oracle:thin:@an-PC:1525/orclg”; 联系 con=DriverManager.getConnection(url,“用户”,“传递”); out.println(“连接”+con); 语句stm=con.createStatement(); String sql=“插入名称(names)值(“+pname+”)”; stm.executeUpdate(sql); System.out.println(“插入的记录…”); con.close(); }catch(classnotfound异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); }捕获(SQLE异常){ //TODO自动生成的捕捉块 e、 printStackTrace();} } 受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)抛出 ServletException,IOException{ } } 以下是例外情况
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)为什么不将servlet中的数据插入sql数据库? html文件 你好 姓名: servlet代码 导入java.io.IOException; 导入java.io.PrintWriter; 导入java.sql.Connection; 导入java.sql.DriverManager; 导入java.sql.SQLException; 导入java.sql.Statement; 导入javax.servlet.ServletException; 导入javax.servlet.http.HttpServlet; 导入javax.servlet.http.HttpServletRequest; 导入javax.servlet.http.HttpServletResponse; 公共类Try扩展了HttpServlet{ 私有静态最终长 serialVersionUID=1L; 连接con; 报表stm; 公共审判{ 超级(); } 受保护的void doGet(HttpServletRequest-req,HttpServletResponse-res)抛出ServletException, IOException{ res.setContentType(“文本/html”); PrintWriter out=res.getWriter(); 试试{ 字符串pname=req.getParameter(“名称”); 类forName(“oracle.jdbc.driver.OracleDriver”); System.out.println(“驱动程序加载”); String url=“jdbc:oracle:thin:@an-PC:1525/orclg”; 联系 con=DriverManager.getConnection(url,“用户”,“传递”); out.println(“连接”+con); 语句stm=con.createStatement(); String sql=“插入名称(names)值(“+pname+”)”; stm.executeUpdate(sql); System.out.println(“插入的记录…”); con.close(); }catch(classnotfound异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); }捕获(SQLE异常){ //TODO自动生成的捕捉块 e、 printStackTrace();} } 受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)抛出 ServletException,IOException{ } } 以下是例外情况,java,html,servlets,oracle10g,Java,Html,Servlets,Oracle10g,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.C
在java.lang.Thread.run(Thread.java:745)这句话可能是您的问题:
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
我认为应该引用如下:
String sql="Insert into name(names)values("+"'pname')";
您应该学习解释堆栈跟踪。堆栈跟踪的第一行表示Java运行时无法找到类
oracle.jdbc.driver.OracleDriver
。
这是Oracle JDBC驱动程序类
因此,获取并将其放入web应用程序的web-INF/lib
文件夹中
顺便说一句:为了防止这种情况发生,您永远不应该通过字符串操作来创建带有未跳过的请求参数的SQL。使用预先准备好的语句。不要忘记关闭语句并提交事务
String sql="Insert into name(names)values('"+pname+"')";
这将自动转义引号之类的字符。此外,您应该在执行插入之前验证该值(例如,根据名称列的长度,长度不超过100个字符)。提供堆栈跟踪!“插入到名称(names)值(“+”'pname')”,打印此字符串的ln,在sqldeveloper(或用于管理数据库的任何程序)中执行它,以查看查询是否正常。”。(错误的表?错误的属性?)?
PreparedStatement stm = con.prepareStatement("insert into name (names) values (?)");
stm.setString(1, pname);
stm.executeUpdate();
con.commit();
stm.close();