源码如下
package com.bjsxt.shopping;import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.sql.Connection;import com.bjsxt.shopping.util.*;public class User {
private int id;
private String username;
private String password;
private String phone;
private String addr;
private Timestamp rdate;

public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Timestamp getRdate() {
return rdate;
}
public void setRdate(Timestamp rdate) {
this.rdate = rdate;
}
public String getUserName() {
return username;
}
public void setUserName(String userName) {
this.username = userName;
}
public void save() {
Connection conn = null;
PreparedStatement pStmt = null;
try{
conn = DB.getConn();
String sql = "insert into ruser values(null, ?, ?, ?, ?, ?)";
pStmt = DB.getPrStmt(conn, sql);
pStmt.setString(1, username);
pStmt.setString(2, password);
pStmt.setString(3, phone);
pStmt.setString(4, addr);
pStmt.setTimestamp(5, rdate);
pStmt.executeUpdate();
} catch(SQLException e) {
e.printStackTrace();
} finally {
DB.closeStmt(pStmt);
DB.closeConn(conn);
}

}
}
package com.bjsxt.shopping.util;import java.sql.*;public class DB {
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private DB() {}

public static Connection getConn() {
Connection conn = null;
try{
conn = DriverManager.getConnection("jdbc:mysql://localhost/8888/shopping?uesr=root&password=root");
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}

public static void closeConn(Connection conn) {
if(conn != null) {
try {
conn.close();
conn = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}

public static Statement getStmt(Connection conn) {
Statement stmt = null;
try {
stmt = conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
return stmt;
}

public static PreparedStatement getPrStmt(Connection conn, String sql) {
PreparedStatement pStmt =null;
try {
pStmt = conn.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return pStmt;
}

public static void closeStmt(Statement stmt) {
if(stmt != null) {
try {
stmt.close();
stmt = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}

public static ResultSet executeQuery(Statement stmt, String sql) {
ResultSet rs = null;
try {
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}

public static void closeRs(ResultSet rs) {
if(rs != null) {
try {
rs.close();
rs = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}错误行数 2012-8-10 6:32:13 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at com.bjsxt.shopping.util.DB.getPrStmt(DB.java:49)
at com.bjsxt.shopping.User.save(User.java:60)
at org.apache.jsp.register_jsp._jspService(register_jsp.java:62)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:371)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)
2012-8-10 6:40:56 org.apache.catalina.core.StandardContext reload
信息: Reloading this Context has started请问是什么问题呢? 谢谢

解决方案 »

  1.   

    at com.bjsxt.shopping.util.DB.getPrStmt(DB.java:49)
    这个DB类49行是哪一行code
    是不是pStmt = conn.prepareStatement(sql);
    如果是,检查在执行过程中你的conn是否得到,debug看看conn是不是null
    或者System.out.println(conn);看看是不是null
      

  2.   

    仔细检查 你会发现null的地方
      

  3.   

    你是不是把id设为主键,不能为空,而你的user。save的sql语句中插入了null。
      

  4.   

    你传的
    conn = DB.getConn();Connection 是空的没有值;看下MySQL的连接字符串
    com.mysql.jdbc.Driverjdbc:mysql://192.168.130.188:3306/数据库名跟密码么
      

  5.   

    楼主使用debug 方式启动myeclipse 在at com.bjsxt.shopping.util.DB.getPrStmt(DB.java:49) 这个方法设置一个断点,进行跟踪一下,看看是什么地方报的null。
      

  6.   

    debug方法 再hardcode写下 就能发现错误了
      

  7.   

    pStmt.setString(1, username);
    pStmt.setString(2, password);
    pStmt.setString(3, phone);
    pStmt.setString(4, addr);
    pStmt.setTimestamp(5, rdate);
    这里你传过去的username等从哪里来的?你的add()方法不需要先传个User对象过来吗?
      

  8.   

    应该为add(User user)方法
    然后
    pStmt.setString(1, user.getUserName());
    pStmt.setString(2, user.getPassword());
    pStmt.setString(3, user.getPhone());
    pStmt.setString(4, user.getAddr());
    pStmt.setTimestamp(5, user.getDdate());
    这样写,才会得到哪些数据,才能传给数据库进行操作
      

  9.   

    NullPointerException 都是源于不好的编码习惯。1:对于所有的 public 方法参数进行非空检查
    2:对于所有的外部响应(数据库、WEB 服务、HTTP 响应等)结果进行非空检查
      

  10.   

    关于你的报错,在conn处设置断点进行debug,看conn的值是否为空,或者干脆在conn = DB.getConn();的下面加一句System.out.println(conn),看到底获取了conn没有
    还有,pStmt.setString(1, username);这里也有点问题,username还没赋值,要用user.getUsername().
      

  11.   

    关于你的报错,在conn处设置断点进行debug,看conn的值是否为空,或者干脆在conn = DB.getConn();的下面加一句System.out.println(conn),看到底获取了conn没有
    还有,pStmt.setString(1, username);这里也有点问题,username还没赋值,要用user.getUsername().