小弟初学编程,遇到了一个灵异问题 
做一个用户登录系统,写了一个验证用户的方法: 
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 ; 
再运行,竟然也可以运行了,百思不得其解。 
望高手指导!谢谢!!

解决方案 »

  1.   

    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; 

      

  2.   

    不的你怎么学的oracle 。
    用DDL操作oracle 时, 需要 手动commit 列
    当然你看到的是更改后的结果,但通过程序访问是旧的数据,
    更改表以后,加上commit
      

  3.   

    如果你用了Tomcat的话,就有可能存在一个延时的问题,   比如说,当你工程重新部署发布的时候,就有一段更新时间,当然根据电脑的配置不同,更新时间的长短也不相同,
     
       当工程还没更新完的时候,那么你在去查询的时候,就查到的是原来还没有更新的数据,当你更新完后在去查就可以   查到重新发布后的数据了。。
      

  4.   

    但是和rs取不到数据是没关系的吧,即使他有延时的问题,rs也应该取到原始的数据啊,可是我这个情况rs始终是空,改一下表名后才取到的,所以奇怪
      

  5.   


    也就是说,当项目还没跟新完毕的时候,你rs取值是取到一个错误的数据,是你以前的一些错误操作还没更新完毕,
    当你更改表名为t的时候,项目又正好更新完毕,查找了正确的数据,当你在改回来表名shopping_users,
    可能还是没更新完毕
      

  6.   

    rs.getString(1)有问题吧···
    你只找了一个字段出来··可是结果集rs是从(0)开始的吧··