2013-12-11 59 views
-4

问题肯定是范围之内,但是,我有问题搞清楚为什么,因为我宣布,被存储在循环外的信息访问数据库信息的循环内,并且存储外

public Member searchMember (String email) { 

    int Sid = 0; 
    String name =""; 
    String adr = ""; 
    String phone = ""; 
    String email2 = ""; 
    String pass = ""; 
    boolean status =false; 
    Member a = new Member(name,adr,phone,email2,pass); 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     con = DriverManager.getConnection("jdbc:mysql://compsi:3306/mcrowley","mcrowley","700463874"); 
     Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); 
     System.out.println(email); 
     String query = "Select id,name,address,phoneNum,email,password,LoginStatus From member WHERE email Like '%"+email+"%' "; 
     ResultSet results = stmt.executeQuery(query); 
     System.out.println("Before while loop"); 
     int count = 0; 
     while (results.next() || count == 0) { 
      if (count == 0) 
      results.absolute(1); 

      System.out.println("Start while loop"); 
      Sid = results.getInt(1); 
      //System.out.println(Sid+" this is test in jdbc"); 
      name = results.getString(2); 
      //System.out.println(name+" this is test in jdbc"); 
      adr = results.getString("address"); 
      phone = results.getString("phoneNum"); 
      email2 = results.getString("email"); 
      pass = results.getString("password"); 
      int stat = results.getInt("loginStatus"); 
      if (stat == 0) { 
       status = false; 
      } 
      else { 
       status = true; 
      } 
      count++; 
      if (!results.next()) { 
       a.setName(name); 
       a.setAddress(adr); 
       a.setPhoneNumber(phone); 
       a.setEmail(email2); 
       a.setPassword(pass); 
       a.setId(Sid); 
       a.setStatus(status); 
       return a; 
      } 
     } 
     System.out.println("After while loop"); 
     a.setName(name); 
     a.setAddress(adr); 
     a.setPhoneNumber(phone); 
     a.setEmail(email2); 
     a.setPassword(pass); 
     a.setId(Sid); 
     a.setStatus(status); 
     //create object & print 
     stmt.close(); 
     con.close(); 
     return a; 

    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return a; 
} 
+3

有什么问题?请说明它.... – Blub

回答

0

所以基本上变量这听起来像你需要关于the scope of variables的进修课程。

本质上,你不会来与代码,你想知道如何解决。但相反,你正在滚动,因为你认为它应该而不是工作。

以下是我记得:每一个范围有权访问本身以及这是它的直接父范围中声明的变量。也就是说,父范围无法读取和修改其即将发出的欢呼声。

因此,基本上,在回答你的问题是,你的直觉是不正确。变量作用域并不像你认为的那样工作。