从sqlite数据库中的db中选择

时间:2014-12-09 13:44:20

标签: android

此代码有什么问题

当我运行程序时,不要回复

    public Cursor checkauth(String username,String password)
{
    Ecommerce=getReadableDatabase();
//  Cursor curser =Ecommerce.rawQuery("select * from customer where username = ? and password =?", new String []{username,password});
    //String [] details={"id","custname","gender"};
    Cursor c = Ecommerce.rawQuery("select id  from customer where username = ? AND password = ?" , new String[] {username,password });
    //Cursor cursor = Ecommerce.query(true, "customer",details,"username = ? AND password = ?", new String[] { username, password },null, null, null, null, null);
    while(c != null)
    {
    c.moveToFirst();
    }
    return c;
}

活动

public void onClick(View arg0) {
            // TODO Auto-generated method stub

            user_name=username.getText().toString();
            passwords=password.getText().toString();
            Cursor c=data.checkauth(user_name, passwords);
            while(!c.isAfterLast())
            {
              username.setText(String.valueOf(c.getInt(0)));
              c.moveToNext();
            }
            }

![在此处输入图片说明] [1]

3 个答案:

答案 0 :(得分:1)

您正在阻止您的UI线程。

此循环永远不会完成:

while(c != null)
    {
    c.moveToFirst();
    }

while条件始终为真。循环似乎没有做任何有用的事情,你可以在那里留下一个简单的c.moveToFirst()

答案 1 :(得分:1)

试试这个..

String selectQuery = "Write select query" ;
SQLiteDatabase db = this.getWritableDatabase();

Cursor cursor = db.rawQuery(selectQuery, null);
boolean result = false;

if (cursor.moveToFirst())
{
        do
        {
            result = true;
        } while (cursor.moveToNext());
    }
    else
    {
        result = false;
    }

答案 2 :(得分:0)

即使已经回答了这个问题,我还是建议一个简单的改进。你在做什么是没用的。您的目标是了解用户是否存在以及他或她的身份是什么。

public int checkAuth(String username, String password) {
    String sql = "select id from customer where username = ? AND password = ?";
    Ecommerce = getReadableDatabase(); //field names never start with uppercase
    Cursor c;
    try {
        c = Ecommerce.rawQuery(sql, new String[] { username, password });
        if (c.moveToFirst()) //if the cursor has any records, this returns true, else false
            return c.getInt(0); //so if a user exists with given params, we can return an id
        else
            return -1; //if not, we return -1, which means: user/pass-combination not found
    }
    finally { //but after the whole method, we need to do some things: 
        if (c != null && !c.isClosed())
            c.close(); //close the cursor
        closeDatabase(); //and close the database
    }
}

这样,您可以将UI代码与数据库代码分开。 cursor不应出现在UI代码中。以上哪些修改,UI代码看起来更清晰

int i = data.checkAuth(username, password);
if (i == -1) {
    //alert of some kind
}
else
    username.setText(String.valueOf(i));