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())这条语句!
谁能帮帮我啊,谢谢大家了
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())这条语句!
谁能帮帮我啊,谢谢大家了
这句有错,导致ResultSet没能获取数据,为null
推断应该是String sql = "select password from Operator where username ='" + username + "'";
你看看这句怎么样ResultSet rs= exeQuery(sql);
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;
}
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语句也没错啊
这是不是用
username like