NullPointerException空指针异常,两天了都没搞定,不知道是怎么产生的哦~~
这个问题我整整搞了两天,方法试了很多,资料也查了一些,可还是不知道自己的错误出在哪里,在这里贴出相关代码来,请高人指点一下啦~~
import java.io.*;
import java.sql.*;
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import course.course;
public class CourseSvlt extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String cour_id =req.getParameter("cour_id");
String action = action = req.getParameter("action");
course cour = null;
String message="";
int refer=0;
if ("refertea".equalsIgnoreCase(action)) {
String tea_name=new String(req.getParameter("tea_name").getBytes("ISO8859_1"));
refer=doRefertea(req,res,cour_id,tea_name);
if(refer==-1){
doError(req,res,"指定教师失败,该教师还未注册,请先为该教师注册!");
}
else if(refer==0){
String tid=cour.getTea_id();
doError(req,res,"指定教师"+tid+"失败,更新数据库有误!!!Rows affected: " + refer);
}
else{
res.sendRedirect("http://localhost:8080/yjs/getcourse.jsp");
}
}
public int doRefertea(HttpServletRequest req,HttpServletResponse res,String cour_id,String tea_name)
throws ServletException,IOException{
course cour=new course();
int num=0;
num=cour.refertea(cour_id,tea_name);
return num;
}
}
package course;
import java.sql.*;
import sqlbean.sqlBean;
public class course {
private String tea_id;
private String tea_name;
public void setTea_id(String s){
this.tea_id=s;
}
public String getTea_id(){return tea_id;}
public void setTea_name(String s){
this.tea_name=s;
}
public String getTea_name(){return tea_name;}
public ResultSet getTea_name(String tea_id){//由教师编号得到教师名字
String sql="select name as tea_name from teacher where id='"+tea_id+"'";
sqlBean db = new sqlBean();
ResultSet rs = db.executeQuery(sql);
return rs;
}
public ResultSet getTea_id(String tea_name){//由教师名字得到教师编号
String sql="select id as tea_id from teacher where name='"+tea_name+"'";
sqlBean db = new sqlBean();
ResultSet rs = db.executeQuery(sql);
return rs;
}
public int refertea(String cour_id,String tea_name){//指定任课教师
String tid=null;
int num;
ResultSet rs=getTea_id(tea_name);
try{
if(rs.next()){
tid=rs.getString("tea_id");
setTea_id(tid);
}
}
catch(SQLException e){System.out.print(e.toString());}
if(tea_id.equals(null)){
num=-1;
return num;
}
else{
String sql="update specialty "+
"set tea_id='"+tea_id+"' "+
"where cour_id='"+cour_id+"'";
sqlBean db = new sqlBean();
num=db.executeInsert(sql);
return num;
}
}
}
问题点数:60、回复次数:16Top
1 楼kingofhawks(蓝鹰)回复于 2005-06-03 15:52:19 得分 0
不会单步调试一下啊,都不知道你是哪里出exception,你让人家怎么帮你看嘛,把你的Exception贴上来,代码太长了.Top
2 楼helen2546(约等于)回复于 2005-06-03 15:53:02 得分 0
哦,异常是在doError(req,res,"指定教师"+tid+"失败,更新数据库有误!!!Rows affected: " + refer);上面一行:String tid=cour.getTea_id();抛出的。
如果没有这一行,把tid变成tea_name,则会更新数据库失败。sql语句在查询分析器里就可以执行,不过要把tea_id直接用数据库中的数据代替。那么这里应该是得到的tea_id不正确,是不是course类的set,get方法用的不对啊,我是新手,希望前辈们耐心点帮我看看,指点一下:(
Top
3 楼lzl123(每天解决三个问题)回复于 2005-06-03 16:03:32 得分 0
你的cour变量从声明到使用有赋值吗?我怎么看到Course cour = null;然后就是String tid=cour.getTea_id();Top
4 楼xu_xinyu(雪候鸟)回复于 2005-06-03 16:08:53 得分 0
异常信息里会告诉你在那一行出的这个问题。
找一找。Top
5 楼jackwin(想过更好的生活!!)回复于 2005-06-03 16:10:07 得分 0
course cour = null;<---你干吗?
course cour = new course()<---这样才对吧? 你的doRefertea里不是已经写对的吗?
看下面两句
String tid=cour.getTea_id();
doError(req,res,"指定教师"+tid+"失败,更新数据库有误!!!Rows affected: " + refer);
这两句前好像没有给
tea_id 任何值...
String tid=cour.getTea_id();<---你这时好像没给private String tea_id;<---好像只定义没付值..
public String getTea_id(){return tea_id;}<---你返回一个空值了....Top
6 楼helen2546(约等于)回复于 2005-06-03 16:13:45 得分 0
可是我的course类中的refertea方法中有用setTea_id(tid);给tea_id赋值啊。。。Top
7 楼helen2546(约等于)回复于 2005-06-03 16:20:06 得分 0
还有,我先调用的doRefertea,所以course cour=null应该没影响的吧,我是按照书上说的,对象要先赋空值吗不是。
还有“能声明空对象的尽量声明空对象,不要图省事用null代替。”这句话有点不明白哦,声名空对象不就是得用null吗?
Top
8 楼jackwin(想过更好的生活!!)回复于 2005-06-03 16:20:06 得分 0
public int doRefertea(HttpServletRequest req,HttpServletResponse res,String cour_id,String tea_name)
throws ServletException,IOException{
course cour=new course();
int num=0;
num=cour.refertea(cour_id,tea_name);
return num;
}
}
你在这里赋值?晕不行D这个course cour=new course();只有效于doRefertea里..Top
9 楼jackwin(想过更好的生活!!)回复于 2005-06-03 16:20:12 得分 0
public int doRefertea(HttpServletRequest req,HttpServletResponse res,String cour_id,String tea_name)
throws ServletException,IOException{
course cour=new course();
int num=0;
num=cour.refertea(cour_id,tea_name);
return num;
}
}
你在这里赋值?晕不行D这个course cour=new course();只有效于doRefertea里..Top
10 楼jackwin(想过更好的生活!!)回复于 2005-06-03 16:25:27 得分 0
public int doRefertea(HttpServletRequest req,HttpServletResponse res,String cour_id,String tea_name)
throws ServletException,IOException{
course cour=new course();
int num=0;
num=cour.refertea(cour_id,tea_name);
this.cour.setTea_id(cour.getTea_id());<---这样试试
return num;
}
}Top
11 楼helen2546(约等于)回复于 2005-06-03 16:29:51 得分 0
啊!jackwin(想过更好的生活!!):多谢多谢~
我也怀疑来着,终于可以确定问题是出在这里了!!!
可是,能不能说的详细点呢?
我该怎么做呢?
将返回类型改为course类型吗?我试试去~Top
12 楼jackwin(想过更好的生活!!)回复于 2005-06-03 16:37:20 得分 0
不好意思我的也错了Top
13 楼jackwin(想过更好的生活!!)回复于 2005-06-03 16:40:24 得分 60
public class CourseSvlt extends HttpServlet{
course cour = null;<---使用我的方法要将这定义在此
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String cour_id =req.getParameter("cour_id");
//course cour = null;<--这个无需
String action = action = req.getParameter("action");
String message="";
int refer=0;
那么你的doRefertea里也可以这样改
public int doRefertea(HttpServletRequest req,HttpServletResponse res,String cour_id,String tea_name)
throws ServletException,IOException{
//course cour=new course();<--可以不用了
int num=0;
num=cour.refertea(cour_id,tea_name);
return num;
}
}
Top
14 楼helen2546(约等于)回复于 2005-06-03 16:41:57 得分 0
我把 String tid=cour.getTea_id(); 这句注释掉了,下面那行也改成 doError(req,res,"指定教师失败,更新数据库有误!!!Rows affected: " + refer); 了。
可是运行就会转到错误页面了,显示:指定教师失败,更新数据库有误!!!Rows affected:0
这应该是refertea方法中的问题了吧,再帮我看下吧,我看不出什么问题啊:(
Top
15 楼jackwin(想过更好的生活!!)回复于 2005-06-03 17:09:05 得分 0
if(tea_id.equals(null)){<---问题应该出这里了吧...忘记了equals不知道能不能比较null的变量,你这样的比较可能问题很多我给个我写的函数你see see
public boolean EmptyStr(String s) {//测试是否空字符或者null字符
try {
if (s != null && (s.trim()).length() != 0)
return true;
else
return false;
} catch (Exception e) {
return false;
}
}
Top
16 楼fu80008(福子)回复于 2005-06-06 17:37:59 得分 0
告诉你吧?是找不到文件!Top




