java.lang.NullPointerException
cailiao.entity.Operator.modifyPassword(Operator.java:64)
cailiao.servlet.Modify_pwd.doPost(Modify_pwd.java:53)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
上面是tomcat报错信息,下面是代码!
一共两个类!
第一个
数据库执行类
package cailiao.DB;import java.sql.*;public class ExecuteDB{

private Connection conn;
private Statement stmt;
private ResultSet rs;

public ExecuteDB(){
try {
conn = ConnDB.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public ResultSet exeQuery(String sql){
try {

stmt = conn.createStatement();
rs = stmt.executeQuery(sql);

} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("stmt错误");
}
return rs;
}

public boolean exeSql(String sql){
boolean isExe = false;
try {
stmt = conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
isExe = true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isExe;

}}
第二个实体类,是数据库执行类的子类
ackage cailiao.entity;import cailiao.DB.*;
import java.sql.*;
import java.util.*;public class Operator extends ExecuteDB{
private String Id;
private String username;
private String password;
private String role;


public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}

public int checkuser(String username,String password,String role){
int a = 0;
String sql = "select password from Operator where username = '" + username + "'and role = '" + role + "'";

ResultSet rs = super.exeQuery(sql);
try {
while(rs.next()){
String realpassword = rs.getString("password");
if(realpassword.equals(password)){
a = 1;
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return a;
}

public int modifyPassword(String username,String oldpassword,String newpassword){
int a = 0;
String sql = "select password form Operator where username ='" + username + "'";

ResultSet rs = super.exeQuery(sql);
try {
while(rs.next()){
String realpassword = rs.getString("password");
if(oldpassword==realpassword){
String sql1 = "update Operator set password='" + newpassword + "' where username='" + username + "'";
if(super.exeSql(sql1)){
a=1;
}

}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("数据库错误!");
}

return a;
}

public ArrayList queryUser(String userstr,String role){
ArrayList a = new ArrayList();

String sql = "selece * from Operator where username ='%" + userstr + "%' and role='" + role + "' order by Id ASC";
ResultSet rs = super.exeQuery(sql);

try {
while(rs.next()){
Operator o = new Operator();
o.setId(""+rs.getInt("Id"));
o.setPassword(rs.getString("username"));
o.setRole(rs.getString("role"));
o.setUsername(rs.getString("username"));

a.add(o);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


return a;
}

public int addUser(String username,String password,String role){
int a = 0;
String sql = "insert into Operator (username, password, role) values " +
     "('" + username + "','" + password + "','" + role + "')";

if(super.exeSql(sql)){
a = 1;
}

return a;
}
要说明一下,一共有四个方法,第一个public int checkuser(String username,String password,String role)这个是界面登陆用的,这个方法好用!
第二个public int modifyPassword(String username,String oldpassword,String newpassword)
第三个public ArrayList queryUser(String userstr,String role)不好用!
第四个方法好用
public int addUser(String username,String password,String role)
要说明的是,第64行就是
try {
这一行是第64行 while(rs.next()){
String realpassword = rs.getString("password");
if(oldpassword==realpassword){
String sql1 = "update Operator set password='" + newpassword + "' where username='" + username + "'";
if(super.exeSql(sql1)){
a=1;
}

}
}
第四个方法好用是可能是因为没有用到while(rs.next())这条语句!
谁能帮帮我啊,谢谢大家了

解决方案 »

  1.   

    String sql = "select password form Operator where username ='" + username + "'";
    这句有错,导致ResultSet没能获取数据,为null
    推断应该是String sql = "select password from Operator where username ='" + username + "'";
      

  2.   

    估计  ResultSet rs = super.exeQuery(sql); 没有执行成功而且感觉你对继承的概念没有理解清楚,
    你看看这句怎么样ResultSet rs= exeQuery(sql);
      

  3.   


    try { 
    这一行是第64行 while(rs.next()){ 
    String realpassword = rs.getString("password"); 
    if(oldpassword==realpassword){ ---->if(oldpassword.equals(realpassword)){
    String sql1 = "update Operator set password='" + newpassword + "' where username='" + username + "'"; 
    if(super.exeSql(sql1)){ 
    a=1; 

      

  4.   

    对啊,真是的,谢谢大家了,可是你能在看看第三个方法吗!也就是
    public ArrayList queryUser(String userstr,String role){ 
    ArrayList a = new ArrayList(); String sql = "selece * from Operator where username ='%" + userstr + "%' and role='" + role + "' order by Id ASC"; 
    ResultSet rs = super.exeQuery(sql); try { 
    while(rs.next()){ 
    Operator o = new Operator(); 
    o.setId(""+rs.getInt("Id")); 
    o.setPassword(rs.getString("username")); 
    o.setRole(rs.getString("role")); 
    o.setUsername(rs.getString("username")); a.add(o); 
    } } catch (SQLException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } return a; 

    现在这个还是java.lang.nullpointerException错误
    这看这回的SQL语句也没错啊
      

  5.   

    谢谢大家了,已经知道了,还是我的SQL语句有问题,再次感谢!
      

  6.   

    username =
    这是不是用
    username like
      

  7.   

    selece * from Operator where username ='%" + userstr + "%这里应该是username like 而不是=吧?