2017-01-10 35 views
-1

我需要在edittext中輸入用戶名&密碼&單擊按鈕將它們存儲到數據庫中。只有在任何其他記錄沒有相同的用戶名時,他們才應存儲。這一次導致應用程序崩潰如何讓我的Android應用插入記錄僅當它不存在時才顯示Toast或Message?

public void updateDB(){ 
    username = editTextUser.getText().toString(); 
    password = editTextPassword.getText().toString(); 
    cursor = db.rawQuery("select * from " +UserDatabase.TABLE1+" where"+UserDatabase.USERNAME+" ='" +username+ "'",null); 
    if (cursor.getCount()==0) { 
     values.put(UserDatabase.USERNAME,username); 
     values.put(UserDatabase.PASSWORD,password); 
     try { 
      db.insert(UserDatabase.TABLE1, null, values); 
      Toast.makeText(this,"Registered", Toast.LENGTH_SHORT).show(); 
      Log.d("SignUpActivity", username + " " + password); 
     } catch (SQLiteException e) { 
      e.printStackTrace(); 
     } 
    } else { 
     Toast.makeText(this,"Username NA", Toast.LENGTH_SHORT).show(); 
    } 
} 
+4

歡迎來到Stack Overflow!您可以先參加[tour](http://stackoverflow.com/tour)並學習[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)並創建一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例。我們會更容易幫助你。 –

+3

我喜歡一個很好的問題。這不是一個。 –

回答

-1

使用此方法來檢查用戶已經存在的或沒有。

// For UserName[Person] Already Exist 
    public String ExistsValidation(String PersonName) { 
     String PName = ""; 
     SQLiteDatabase db = this.getReadableDatabase(); 
     try { 

      Cursor cursor = db.query(TABLE_NAME, null, PERSON_NAME + "=?", new String[]{String.valueOf(PersonName).trim()}, null, null, null); 
      if (cursor == null) { 
       return PName; 
      } else { 
       cursor.moveToFirst(); 
       PName = cursor.getString(cursor.getColumnIndex("PersonName")); 
      } 
      cursor.close(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     db.close(); 
     return PName; 
    } 

使用上面的方法一樣:

String PersonName = etPersonName.getText().toString().trim(); 
    String storedPersonName = db.ExistsValidation(PersonName); 

    // if PersonName Exists 
    if (PersonName.equals(storedPersonName)) { 
     ShowAlertDialog("Error..!", "PersonName Already Exists,Enter Another Name"); 
     return false; 
    } 
+0

和你只需要檢查已經用戶名不是用於密碼... 因爲一個或多個用戶的密碼應該相同 –

+0

你檢查過'cursor == null'嗎?如果沒有返回行,則遊標不會爲空。你應該檢查計數。例如'(cursor.getCount()== 0)'或'(cursor.getCount()<1)' – MikeT

+0

是的@MikeT ....你是正確的...但這個代碼適用於我... Tnx –

-1

你可以使用insertOrThrow()方法來代替,只是把一個唯一的關鍵字的用戶名之前在表和引入新的

catch with(SQLException e){} 
在此

你可以爲你提供食譜

+0

它總是拋出異常。請問我在哪裏放UNIQUE? – Sooraj

+0

在您編寫的地方添加UNIQUE爲您的數據庫創建表格說明在用戶名 '如果不存在,則創建表用戶(username UNIQUE varchar,....)' – pkgrover

相關問題