求教:关于JSP修改数据库信息的问题?

ihgoggog 2009-12-30 04:09:04
public boolean mm(String user,String oldpsw,String newpsw){
String dlsql = "SELECT * FROM person WHERE user=? and psw=?";
String xgsql = "UPDATE person SET psw=? WHERE user=?";
boolean flag = false;
try{
stmt = conn.prepareStatement(dlsql);
stmt.setString(1, user);
stmt.setString(2,oldpsw);
rs = stmt.executeQuery();
if(rs.next()){

stmt = conn.prepareStatement(xgsql);
stmt.setString(1,newpsw);
stmt.setString(2,user);
rs1 = stmt.executeQuery();
if(rs1.next()){flag = true;}else{flag=false;}
}else{flag = false;}
}catch(Exception e){
System.out.println("修改异常");
System.err.println(e.getMessage());
}
return flag;
}
上面是我写的关于密码修改的代码。连的是ACCESS,库是连上了,只是修改不成功,帮看看哪有错误。是程序错?还是SQL语句错?
...全文
355 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ihgoggog 2009-12-31
  • 打赏
  • 举报
回复
public boolean mm(String user,String oldpsw,String newpsw){
System.out.println(user);
System.out.println(oldpsw);
System.out.println(newpsw);
String sql = "UPDATE person SET psw=? WHERE user=? and psw=?";
boolean flag = false;
try{
stmt = conn.prepareStatement(sql);
stmt.setString(1,newpsw);
stmt.setString(2,user);
stmt.setString(3,oldpsw);
int k = stmt.executeUpdate();
if(k > 0){
flag = true;
}else{
flag = false;
}
}catch(Exception e){
System.out.println("修改异常");
System.err.println(e.getMessage());
}
return flag;
}
我写成这样了,为什么还是不能修改呢????
下面是我的连库方法:
private Connection conn;
private PreparedStatement stmt;
private ResultSet rs;
private String username = "";
private String password = "";
private String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=";
private String driverClass = "sun.jdbc.odbc.JdbcOdbcDriver";
public Connection getConn(String real)//real的值在Servlet中接收了
{
try {
url = url+real;
Class.forName(driverClass);//加载驱动
conn = DriverManager.getConnection(url,username,password);//创建连接
}
catch (Exception e) {
System.out.println("连接数据库出错");
System.err.println(e.getMessage());
}
return conn;
}
ihgoggog 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 crazylaa 的回复:]
rs、stmt 这种东西怎么能定义成全局变量呢?应该是用完就扔的。
[/Quote]
本来就是PRIVATE的,只是上面没写,不好意思啊~!
ihgoggog 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 swandragon 的回复:]
Java codepublicboolean mm(String user,String oldpsw,String newpsw){
String dlsql="SELECT * FROM person WHERE user=? and psw=?";
String xgsql="UPDATE person SET psw=? WHERE user=?";bool?-
[/Quote]
呵呵。。这几天弄的我都有点蒙了。。
zhoutt1989 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liuhongyu_cjzm 的回复:]
rs1 = stmt.executeQuery();
你在修改的时候  别用这个方法,
好像有executeUpdate()
你试试  我还是上学的时候学过Java
现在都忘了  你试一下~~
[/Quote]顶顶……
q138026310 2009-12-30
  • 打赏
  • 举报
回复
楼上
liuhongyu_cjzm 2009-12-30
  • 打赏
  • 举报
回复
rs1 = stmt.executeQuery();
你在修改的时候 别用这个方法,
好像有executeUpdate()
你试试 我还是上学的时候学过Java
现在都忘了 你试一下~~
dyflovexlp 2009-12-30
  • 打赏
  • 举报
回复
第一个stmt.executeQuery();第二个stmt.executeUpdate();

用一条sql就够了....update pwd = ? where username= ? and pwd = ?
crazylaa 2009-12-30
  • 打赏
  • 举报
回复
rs、stmt 这种东西怎么能定义成全局变量呢?应该是用完就扔的。
zl3450341 2009-12-30
  • 打赏
  • 举报
回复
修改时报什么错呢
SambaGao 2009-12-30
  • 打赏
  • 举报
回复
SELECT * FROM person WHERE user=? and psw=?"
有用吗?
UPDATE person SET psw=? WHERE user=? and psw=? 一条就行了。
你的逻辑好像就点问题。
swandragon 2009-12-30
  • 打赏
  • 举报
回复

public boolean mm(String user,String oldpsw,String newpsw){
String dlsql = "SELECT * FROM person WHERE user=? and psw=?";
String xgsql = "UPDATE person SET psw=? WHERE user=?";
boolean flag = false;
try{
stmt = conn.prepareStatement(dlsql);
stmt.setString(1,user);
stmt.setString(2,oldpsw);
rs = stmt.executeQuery();
if(rs.next()){
stmt.close();
stmt = conn.prepareStatement(xgsql);
stmt.setString(1,newpsw);
stmt.setString(2,user);
int k = stmt.executeUpdate();
if(k > 0){
flag = true;
}else{
flag = false;
}
}
}catch(Exception e){
System.out.println("修改异常");
System.err.println(e.getMessage());
}
return flag;
}

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧