2012-09-12 102 views
1

我正在使用databaseutils在我的數據庫上運行SQL查詢。基本上只是一個登錄,但我想採取登錄的人的用戶名,所以我選擇了。它可以正常工作,但是當沒有結果時會下降。如果有設置if或set的方法嗎?沒有結果的Android SQLite

if(String.valueOf(loginCount).equals("2")) { 

    File dbfile = new File(Global.StaticDB + "/Users"); 
    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null); 

    String loginQueryCheck=(String)DatabaseUtils.stringForQuery(db,"SELECT UserID from Users where Username like '" + txtUsername.getText().toString() + "' AND Password like '" + txtPassword.getText().toString() + "'",null); 

    Log.e("Login Query:", loginQueryCheck); 
    db.close(); 

    if(loginQueryCheck.length() > 1) { 
     Context context = getApplicationContext(); 
    CharSequence text = "Logged In"; 
    int duration = Toast.LENGTH_SHORT; 
    Toast toast = Toast.makeText(context, text, duration); 
    toast.show(); 
    Intent ShowMainPage = new Intent(view.getContext(), MainPage.class); 
    startActivityForResult(ShowMainPage, 0); 
    } else { 
     Context context = getApplicationContext(); 
    CharSequence text = "Login Failed"; 
    int duration = Toast.LENGTH_SHORT; 
    Toast toast = Toast.makeText(context, text, duration); 
    toast.show(); 
    } 
    } 
+0

如果我的名字是'Selvin',該怎麼辦? DROP TABLE USERS; - '? http://xkcd.com/327/ ...無論如何,如果沒有結果從'DatabaseUtils.stringForQuery'返回'null',然後檢查'loginQueryCheck'是否爲'null' – Selvin

+0

感謝您的支持。關於保護沒關係,幸運的是它是一個內部應用程序。如果它是外部的,我會保護。謝謝 - Tom – TMB87

+0

如果將stringForQuery包裝在catch塊中會發生什麼 - 是否引發了任何異常? – gheese

回答

0

變化支票:

if(loginQueryCheck != null && !loginQueryCheck.equals("") && loginQueryCheck.length() > 0) 
0

我想你可能會嘗試計算用戶名在SQL語句代替查詢用戶名。

int loginQueryCheck=(int)DatabaseUtils.stringForQuery(db, 
     "SELECT COUNT(DISTINCT UserID) FROM Users WHERE Username like '" + 
     txtUsername.getText().toString() + "' AND Password like '" + 
     txtPassword.getText().toString() + "'",null);