小弟初学编程,遇到了一个灵异问题
做一个用户登录系统,写了一个验证用户的方法:
public boolean check(String name,String passwd) {
boolean flag = false;
Connection conn = null;
Statement stmt = null;
PreparedStatement ps = null;
ResultSet rs = null;
System.out.println(name);
System.out.println(passwd);
connDB conndb = new connDB();
conn = conndb.getConn();
try {
ps = conn.prepareStatement("select password from shopping_users where name=?");
ps.setString(1, name);
rs = ps.executeQuery();
System.out.println("in try " + name);
while (rs.next()) {
String pwd = rs.getString(1);
System.out.println(pwd);
if(passwd.equals(pwd)) {
flag = true;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
使用的是oracle数据库,但是无论如何rs中也去不到数据!!!
经过多方询问同学,均无结果,突发灵感,将oracle中的表明更改了:rename shopping_users to u;
再次运行,rs就取到值了,以为是oracle的表明不可以有下划线,但是当我再次吧表名改回来时:rename u to shopping_users ;
再运行,竟然也可以运行了,百思不得其解。
望高手指导!谢谢!!
做一个用户登录系统,写了一个验证用户的方法:
public boolean check(String name,String passwd) {
boolean flag = false;
Connection conn = null;
Statement stmt = null;
PreparedStatement ps = null;
ResultSet rs = null;
System.out.println(name);
System.out.println(passwd);
connDB conndb = new connDB();
conn = conndb.getConn();
try {
ps = conn.prepareStatement("select password from shopping_users where name=?");
ps.setString(1, name);
rs = ps.executeQuery();
System.out.println("in try " + name);
while (rs.next()) {
String pwd = rs.getString(1);
System.out.println(pwd);
if(passwd.equals(pwd)) {
flag = true;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
使用的是oracle数据库,但是无论如何rs中也去不到数据!!!
经过多方询问同学,均无结果,突发灵感,将oracle中的表明更改了:rename shopping_users to u;
再次运行,rs就取到值了,以为是oracle的表明不可以有下划线,但是当我再次吧表名改回来时:rename u to shopping_users ;
再运行,竟然也可以运行了,百思不得其解。
望高手指导!谢谢!!
boolean flag = false;
Connection conn = null;
Statement stmt = null;
PreparedStatement ps = null;
ResultSet rs = null;
System.out.println(name);
System.out.println(passwd);
connDB conndb = new connDB();
conn = conndb.getConn();
try {
ps = conn.prepareStatement("select password from shopping_users where name=?");
ps.setString(1, name);
rs = ps.executeQuery();
System.out.println("in try " + name);
while (rs.next()) {
String pwd = rs.getString(1);
System.out.println(pwd);
if(passwd.equals(pwd)) {
flag = true;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
用DDL操作oracle 时, 需要 手动commit 列
当然你看到的是更改后的结果,但通过程序访问是旧的数据,
更改表以后,加上commit
当工程还没更新完的时候,那么你在去查询的时候,就查到的是原来还没有更新的数据,当你更新完后在去查就可以 查到重新发布后的数据了。。
也就是说,当项目还没跟新完毕的时候,你rs取值是取到一个错误的数据,是你以前的一些错误操作还没更新完毕,
当你更改表名为t的时候,项目又正好更新完毕,查找了正确的数据,当你在改回来表名shopping_users,
可能还是没更新完毕
你只找了一个字段出来··可是结果集rs是从(0)开始的吧··