2013-12-23 232 views
0

我想做一个简单的登录系统。这是数据库类中的coed。我的方法是否正确?如果用户名和密码都正确,它应该返回true,如果它们中的任何一个错误或不在数据库中(未注册),它应该返回false?有没有更简单的方法来编写这种方法?Android/Java:我的代码是否正确?

public boolean getAccount(String name, String password) { 
       int test = 0; 
       database = getReadableDatabase(); 
       String sql = "SELECT * FROM tbl_account WHERE username='name' AND password='password'"; 
       Cursor c = database.rawQuery(sql, null); 
       if (c.moveToFirst()) { 
         do { 
           if (c.getString(0).isEmpty()) { 
             test = 0; 
           } 
           else if (c.getString(0).isEmpty() == false) { 
             if (name.equals(c.getString(0))) { 
               if (c.getString(1).isEmpty()) { 
                 test = 0; 
               } 
               else if (password.equals(c.getString(1))) { 
                 test = 1; 
               } 
             } 
           } 
         } while (c.moveToNext()); 
       } 

       if (test == 0) { 
         return false; 
       } else { 
         return true; 
       } 

     } 

回答

0

我觉得你的SQL应该是:

String sql = "SELECT * FROM tbl_account WHERE username='" + name + 
    "' AND password='" + password + "'"; 

试试这个SQL。希望它会有所帮助。

+0

始终使用参数化查询。这得到我的反对票,因为它促进了次级标准练习。 –

3

最佳做法是使用?与选择的参数占位符,您可以:

String sql = "SELECT * FROM tbl_account WHERE username = ? AND password = ?"; 
Cursor c = database.rawQuery(sql, new String[] {name, password}); 

这避免了问题,其中参数本身包含的字符,如引号和apostophes,否则会打破你构建SQL字符串。

+0

感谢您的提示。 –

+0

嗨NigelK,我没有建议他的代码诽谤,我只是发现错误,我很清楚什么是编码指南行和编码诽谤,感谢负面标记? – Yogendra