网上找一个图书馆管理系统来学习,简单改了下前端,配置到本地所有功能都没问题,本地环境:win10+jdk1.7+mysql5.1.49+tomcat7.0.63.
服务器环境:CentOS6.5+jdk1.8+mysql5.1.73+tomcat7.0.39.数据库表结构:网页一旦涉及到访问其中的tb_reader和tb_readertype就报空指针异常,其他功能都没问题:ReaderDAO代码如下:
package com.dao;import com.core.ConnDB;
import java.util.*;
import java.sql.*;
import com.actionForm.ReaderForm;public class ReaderDAO {
    private ConnDB conn=new ConnDB();
//查询数据
public Collection query(String strif){
    ReaderForm readerForm=null;
    Collection readerColl=new ArrayList();
    String sql="";
    if(strif!="all" && strif!=null && strif!=""){
        sql="select r.*,t.name as typename,t.number from tb_reader r left join tb_readerType t on r.typeid=t.id where "+strif+"";
    }else{
        sql="select r.*,t.name as typename,t.number from tb_reader r left join tb_readerType t on r.typeid=t.id";
    }
    ResultSet rs=conn.executeQuery(sql);
    try {
        while (rs.next()) {
            readerForm=new ReaderForm();
            readerForm.setId(Integer.valueOf(rs.getString(1)));
            readerForm.setName(rs.getString(2));
            readerForm.setSex(rs.getString(3));
            readerForm.setBarcode(rs.getString(4));
            readerForm.setVocation(rs.getString(5));
            readerForm.setBirthday(rs.getString(6));
            readerForm.setPaperType(rs.getString(7));
            readerForm.setPaperNO(rs.getString(8));
            readerForm.setTel(rs.getString(9));
            readerForm.setEmail(rs.getString(10));
            readerForm.setCreateDate(rs.getString(11));
            readerForm.setOperator(rs.getString(12));
            readerForm.setRe(rs.getString(13));
            readerForm.setTypeid(rs.getInt(14));
            readerForm.setTypename(rs.getString(15));
            readerForm.setNumber(rs.getInt(16));
            readerColl.add(readerForm);
        }
    } catch (SQLException ex) {
    }
    conn.close();
    return readerColl;
}
//用于修改的查询
public ReaderForm queryM(ReaderForm readerForm){
    ReaderForm readerForm1=null;
    String sql="";
    if(readerForm.getId()!=null){
            sql="select r.*,t.name as typename,t.number from tb_reader r left join tb_readerType t on r.typeid=t.id where r.id="+readerForm.getId()+"";
    }else if(readerForm.getBarcode()!=null){
            sql="select r.*,t.name as typename,t.number from tb_reader r left join tb_readerType t on r.typeid=t.id where r.barcode="+readerForm.getBarcode()+"";
        }
    System.out.println("修改读者信息时的SQL:"+sql);
    ResultSet rs=conn.executeQuery(sql);
    try {
        while (rs.next()) {
            readerForm1=new ReaderForm();
            readerForm1.setId(Integer.valueOf(rs.getString(1)));
            readerForm1.setName(rs.getString(2));
            readerForm1.setSex(rs.getString(3));
            readerForm1.setBarcode(rs.getString(4));
            readerForm1.setVocation(rs.getString(5));
            readerForm1.setBirthday(rs.getString(6));
            readerForm1.setPaperType(rs.getString(7));
            readerForm1.setPaperNO(rs.getString(8));
            readerForm1.setTel(rs.getString(9));
            readerForm1.setEmail(rs.getString(10));
            readerForm1.setCreateDate(rs.getString(11));
            readerForm1.setOperator(rs.getString(12));
            readerForm1.setRe(rs.getString(13));
            readerForm1.setTypeid(rs.getInt(14));
            readerForm1.setTypename(rs.getString(15));
            readerForm1.setNumber(rs.getInt(16));
            System.out.println(rs.getString(2));
        }
    } catch (SQLException ex) {
    }
    conn.close();
    return readerForm1;
}
//添加数据
public int insert(ReaderForm readerForm){
String sql1="SELECT * FROM tb_reader WHERE barcode='"+readerForm.getBarcode()+"'";
ResultSet rs = conn.executeQuery(sql1);
String sql = "";
int falg = 0;
try {
    if (rs.next()) {
        falg = 2;
    } else {
        sql ="Insert into tb_reader (name,sex,barcode,vocation,birthday,paperType,paperNO,tel,email,createDate,operator,re,typeid) values('"+readerForm.getName()+"','"+readerForm.getSex()+"','"+readerForm.getBarcode()+"','"+readerForm.getVocation()+"','"+readerForm.getBirthday()+"','"+readerForm.getPaperType()+"','"+readerForm.getPaperNO()+"','"+readerForm.getTel()+"','"+readerForm.getEmail()+"','"+readerForm.getCreateDate()+"','"+readerForm.getOperator()+"','"+readerForm.getRe()+"',"+readerForm.getTypeid()+")";
        falg = conn.executeUpdate(sql);
        System.out.println("添加读者信息的SQL:" + sql);
        conn.close();
    }
} catch (SQLException ex) {
    falg = 0;
}
System.out.println("falg:"+falg);
return falg;
}//修改数据
public int update(ReaderForm readerForm){
String sql="Update tb_reader set sex='"+readerForm.getSex()+"',barcode='"+readerForm.getBarcode()+"',vocation='"+readerForm.getVocation()+"',birthday='"+readerForm.getBirthday()+"',paperType='"+readerForm.getPaperType()+"',paperNO='"+readerForm.getPaperNO()+"',tel='"+readerForm.getTel()+"',email='"+readerForm.getEmail()+"',re='"+readerForm.getRe()+"',typeid="+readerForm.getTypeid()+" where id="+readerForm.getId()+"";
int falg=conn.executeUpdate(sql);
System.out.println("修改数据时的SQL:"+sql);
conn.close();
return falg;
}
//删除数据
public int delete(ReaderForm readerForm){
String sql="Delete from tb_reader where id="+readerForm.getId()+"";
int falg=conn.executeUpdate(sql);
System.out.println("删除时的SQL:"+sql);
return falg;
}
}
项目框架:数据库能够正常读取表:服务器地址:http://hustsuoffice.cn
超级管理员
账户:tsoft
密码:111
读者管理两个功能报错,图书类型管理功能报错,图书借阅查询读者信息报错,都是空指针异常,与那两个表有关的数据好像都读取不出来,其他表都可以,感觉不是数据库链接的问题,但是又读不到数据。求大神帮忙。

解决方案 »

  1.   

    你59行出空指针异常,SQL语句可能没有走进两个IF吧,SQL是空的,RS查出来也就是NULL,你把SQL语句那附近多打几个桩自己调试一下吧
      

  2.   

    跟数据库没关系,数据库的异常都是java.sql.SQLException
    你这应该sql这个变量是空的语言,会断点么...估计两个if都没进
    sql不是这么拼的
      

  3.   

    SQL语句拼错了,传的参数是不是应该在前后加 单引号-‘,另外检查一下代码
    ResultSet rs=conn.executeQuery(sql);
        try {
            while (rs.next()) {如果sql没有问题,要么conn为空,要么查询的结果集rs为空。
      

  4.   

    你查询的结果是null。所以rs.next抛出异常了。
    你可以把sql语句打印出来,然后直接用数据库管理工具执行下sql语句看看有没有问题。