package com.car.dao;import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;import com.car.util.ConnOracle;
import com.car.vo.Question;
/**
 * @author cyl
 *
 */
public class CarDAOImpl implements ICarDAO {

private Statement stmt;
/**
 * 
 */
public CarDAOImpl() {
// TODO Auto-generated constructor stub
} public String apply(String pin) {
// TODO Auto-generated method stub
ConnOracle co =new ConnOracle();
String result="";

result = co.apply(pin);

return result;
} public List<Question> exam(String zkzid) {
// TODO Auto-generated method stub
List<Question> list = new ArrayList<Question>();

String sql = "select paper_id from examine where em_in="+zkzid+";";
//System.out.println(sql);可以正常显示
try {
ResultSet rs = stmt.executeQuery(sql);//这里抛出空指针!!!! while(rs.next()){
String paperid = rs.getString("paper_id");
System.out.println(rs.getString("paper_id"));
String sql2 = "select question_id_seq from paper where paper_id="+paperid+";";
ResultSet rs2 =stmt.executeQuery(sql2);
    while(rs2.next()){
    String question_id_seq = rs.getString("question_id_seq");
   
   
    StringTokenizer st = new StringTokenizer(question_id_seq,"_");
    String nextToken = st.nextToken();
do{
    String sql3 = "select * from question where question_id = "+nextToken+";";
    ResultSet rs3 =stmt.executeQuery(sql3);
    Question q = new Question();
    q.setQuestion_id(rs3.getInt("question_id"));
    q.setQuestion_body(rs3.getString("question_body"));
    q.setQuestion_form(rs3.getString("question_form"));
    q.setBranch_a(rs3.getString("Branch_a"));
    q.setBranch_b(rs3.getString("Branch_b"));
    q.setBranch_c(rs3.getString("Branch_c"));
    q.setQuestion_key(rs3.getString("question_key"));
    q.setQuestion_(rs3.getInt("question_"));
    q.setPic_name(rs3.getString("pic_name"));
    q.setQuestion_type_id(rs3.getInt("question_type_id"));
    q.setQuestion_sts(rs3.getString("question_sts"));
    list.add(q);
    nextToken = st.nextToken();
    }while(nextToken != "");
   
    }
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return list;
}
}异常堆
2011-6-7 18:01:20 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet CarServlet threw exception
java.lang.NullPointerException
at com.car.dao.CarDAOImpl.exam(CarDAOImpl.java:50)
at com.car.Servlet.CarServlet.service(CarServlet.java:45)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
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:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)

解决方案 »

  1.   

    我也遇到过相似的情况,用到的是mysql数据库,可能是数据库的问题吧,我又重装了数据库,重新配置了一下就好了,我也不知道咋回事....
      

  2.   

    我一直用的是sql2000的,不知道mysql中的参数是字符串时是不是也要加单引号呢?‘’
    就是这一句:
    String sql = "select paper_id from examine where em_in='"+zkzid+"';";
    这个zkzid要引起来
      

  3.   

    楼上说的对
    String sql = "select paper_id from examine where em_in='"+zkzid+"';";
    这个zkzid要用单引号引起来
    至于空指针是因为stmt为空,因为你在CarDAOImpl 的里面只声明了一个私有成员
    private Statement stmt;没有给它分配内存
    stmt的获得是根据Connection对象获得的,Connection对象要根据数据库的驱动,用户名和密码获得,你的程序缺少老多,请补充