Java 如何在我的表中插入数据?
我创建了一个login.jsp页面…在这个页面的提交按钮底部添加新用户链接。如果我点击该链接,它将打开新的用户注册表格。我已经在oracle中创建了表,如果我提供了要存储在数据库中的数据,但它指示空指针异常…..newuser_db.java的第92行我的数据库连接编码在newuser_db.java中。请帮帮我。。。。。。 错误:第92行是Java 如何在我的表中插入数据?,java,oracle,jsp,servlets,Java,Oracle,Jsp,Servlets,我创建了一个login.jsp页面…在这个页面的提交按钮底部添加新用户链接。如果我点击该链接,它将打开新的用户注册表格。我已经在oracle中创建了表,如果我提供了要存储在数据库中的数据,但它指示空指针异常…..newuser_db.java的第92行我的数据库连接编码在newuser_db.java中。请帮帮我。。。。。。 错误:第92行是stmt1=con.preparest陈述(“插入到userdetails值中(ka1.nextval、、、、、、、、、、、、、、、、、、、、、、、、、、、
stmt1=con.preparest陈述(“插入到userdetails值中(ka1.nextval、、、、、、、、、、、、、、、、、、、、、、、、、、、、、‘as’、‘1987年11月14日’)代码>
设计:
完整代码:
package com.sla;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class newuser_db
*/
public class newuser_db extends HttpServlet {
private static final long serialVersionUID = 1L;
PreparedStatement stmt=null;
Connection con =null;
ResultSet rs=null;
/**
* @see HttpServlet#HttpServlet()
*/
public newuser_db() {
super();
// TODO Auto-generated constructor stub
}
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
try
{
Class.forName("sun.Jdbc.Odbc.JdbcOdbcDriver");
}
catch (ClassNotFoundException ex)
{
ex.printStackTrace();
}
try
{
con =DriverManager.getConnection("Jdbc:odbc:servletdb","system","balaji");
}
catch(SQLException ex)
{
ex.printStackTrace();
}
// TODO Auto-generated method stub
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(arg0, arg1);
PrintWriter out=arg1.getWriter();
String s1=arg0.getParameter("USERID");
String s2=arg0.getParameter("FIRSTNAME");
String s3=arg0.getParameter("LASTNAME");
String s4=arg0.getParameter("EMAILID");
String s5=arg0.getParameter("ORGNAME");
String s6=arg0.getParameter("MOBILENO");
String s7=arg0.getParameter("PHONENO");
String s8=arg0.getParameter("PASSWORD");
out.println("inserted");
out.println(s1);
out.println("inserted1");
//String sql="insert into userdetails values(ka.nextval,"+s1+","+s2+","+s3+","+s4+","+s5+","+s6+","+s7+",56,'de',01-jan-98)";
PreparedStatement stmt1;
try {
stmt1 = con.prepareStatement("insert into userdetails values(ka1.nextval,?,?,?,?,?,?,?,23,'as','14-nov-87')");
stmt1.setString(1,s1);
stmt1.setString(2,s2);
stmt1.setString(3,s3);
stmt1.setString(4,s4);
stmt1.setString(5,s5);
stmt1.setString(6,s6);
stmt1.setString(7,s7);
stmt1.setString(8,s8);
//stmt1.executeUpdate();
out.println("inserted2");
stmt1.executeUpdate();
out.println("inserted3");
} catch (SQLException e1) {
// TODO Auto-generated catch block
out.println(e1);
}
}
@Override
public void destroy() {
// TODO Auto-generated method stub
super.destroy();
try
{
if(stmt!=null)
stmt.close();
stmt=null;
}
catch (SQLException ex)
{
ex.printStackTrace();
}
try
{
if(con!=null)
con.close();
con=null;
}
catch (SQLException ex)
{
ex.printStackTrace();
}
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
请任何人帮助我……我很困惑……如果您在第92行得到一个NullPointerException,似乎con是空的。您的代码是否调用了init?我注意到它不是从构造函数中调用的。这看起来像是您已经学习了一个非常糟糕的教程。我建议阅读一个更好的JDBC教程网站
您的代码可能会出现很多问题。我建议你从你的团队中有知识的人那里得到帮助;互联网论坛只能帮你这么多
PreparedStatement
、ResultSet
和Connection
被声明为servlet的类成员。这是糟糕的编码实践,因为这些成员现在将在多个请求中共享,并且任何请求都可能更改这些成员的状态,从而导致其他请求的模糊和混乱行为
sun.Jdbc.Odbc.JdbcOdbcDriver
用于连接到Oracle 10g Express edition实例。对于JDBC驱动程序来说,这是一个糟糕的选择,因为它是1型驱动程序,并且是在数据库没有实际的JDBC驱动程序时使用的。请改用Oracle 10g/11g JDBC驱动程序
- 在
init
中捕获异常,如ClassNotFoundException
和SQLException
,并在不中止执行的情况下打印它们的堆栈跟踪。在这种情况下,容器将忽略抛出的任何异常,因为您打印了它们的stacktrace。因此servlet将被初始化,但考虑到异常的性质,它完全无法处理请求
- 您正在覆盖
服务
,并且没有为doGet
和doPost
提供方法体。这又是一个糟糕的做法。不要覆盖服务
,除非你有充分的理由(我很确定你没有理由)
话虽如此,您在服务
方法中最有可能得到NullPointerException
的原因可能是因为init
方法的这一行中抛出了异常:
con =DriverManager.getConnection("Jdbc:odbc:servletdb","system","balaji");
由于您正在捕获此行引发的任何异常,并且没有对其进行任何处理,因此您会发现在这种事件中con
变量将为null。稍后,当servlet处理请求并尝试创建PreparedStatement
实例时,它将失败,因为连接
实例为空。您正在抱怨代码第92行出现NullPointerException。可能想给我们看一下代码的第92行。当然,您可以在use_db类的第92行查看哪个变量为null。我的数据库连接代码正确吗?请检查….请给我看那一行….我是jsp和servlet应用程序的新成员请….在您的newuser_db类中,您有一个init方法打开连接,从而实例化con。你叫它吗?如果not con为空。谢谢,我没有工作……实际上我已经尝试了这么多天,在我在这里发布后,没有人帮助我……无论如何,我会尝试……好吧,如果你在这里发布有意义的问题,人们愿意回答。通过你在构建问题框架和调试问题方面所付出的努力,你很可能会通过类似的努力得到答案。response.setContentType(“text/html”);2.String url=“jdbc:mysql://localhost:3306/"; 请解释一下他们为什么要用这两句话……我不明白为什么他们继续读那篇垃圾文章,尽管他们说它写得很差。请阅读Oracle/Sun的。