2012-12-20 144 views
0

我有一個活動,我想創建一個數據庫,並輸入數據,如果以前沒有數據庫存在。否則,我想更新之前輸入的值。SQLite數據庫沒有更新

我試圖通過實現'if-else'來做到這一點。

下面是兩種可能性之間進行選擇的代碼:

public void submitusername(View view) { 
    userdatabase name = new userdatabase(this); 
    name.open(); 
    String user = name.getusername(); 
    name.close(); 

    EditText cinone = (EditText) findViewById(R.id.username); 
    username = cinone.getText().toString(); 

    if(user == null){ 
     userdatabase entry = new userdatabase(Editprofile.this); 
     entry.open(); 
     entry.createEntry(username, null, null, null); 
     entry.close(); 

     Context context = getApplicationContext(); 
     CharSequence text = "Added new user!"; 
     int duration = Toast.LENGTH_LONG; 

     Toast toast = Toast.makeText(context, text, duration); 
     toast.show(); 

    } else { 
     userdatabase update = new userdatabase(Editprofile.this); 
     update.open(); 
     update.updateUsername(username); 
     update.close(); 

     Context context = getApplicationContext(); 
     CharSequence text = "Username updated!"; 
     int duration = Toast.LENGTH_SHORT; 

     Toast toast = Toast.makeText(context, text, duration); 
     toast.show(); 
    } 
} 

下面是其中要求來自數據庫的「用戶名」的方法:

public String getusername() {                
    String[] columns = new String[]{USER_NAME}; 
    Cursor c = userDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null); 

    String result = ""; 

    int iName = c.getColumnIndex(USER_NAME); 

    for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
     result = result + c.getString(iName); 
    } 

    return result; 
} 

方法用於更新用戶名:

public void updateUsername(String name) {              
    ContentValues cvUpdate = new ContentValues(); 
    cvUpdate.put(USER_NAME, name); 

    userDatabase.update(DATABASE_TABLE, cvUpdate, KEY_ROWID + "=" + 0 , null); 
} 

我遇到的問題是 當我運行程序和數據庫不存在(沒有用戶名),點擊按鈕我仍然得到吐司「用戶名更新」,並沒有數據插入。當它顯然應該創建數據庫時,首次插入用戶名並顯示「添加新用戶!另外,如果我刪除'if-else'條件,則不檢查現有數據,只保留「createEntry」部分一切正常;數據被正確插入。所以,這意味着我的「createEntry」部分是正確的。

可能是什麼問題?我在其他活動中實現了getusername(),並且它工作正常。改變你的代碼後

回答

1

嘗試:

userdatabase name = new userdatabase(Editprofile.this); 
    name.open(); 
    String user = name.getusername(); 
    name.close(); 

    EditText cinone = (EditText) findViewById(R.id.username); 
      username = cinone.getText().toString(); 

    if(user.equals("")){ 

     //your code here 
    } 

    else { 
      //your code here 
    } 

,改變你的getusername()方法:

public String getusername() {                
    String[] columns = new String[]{USER_NAME}; 
    Cursor c = userDatabase.query(DATABASE_TABLE, 
             columns, 
        null, 
        null, 
        null, 
        null, 
        null); 

    String result = ""; 
    c.moveToFirst(); 
    if(c.getCount()>0){ 

     int iName = c.getColumnIndex(USER_NAME); 

     for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 

     result = result + c.getString(iName); 
     } 
    } 
    return result; 
} 
+0

好吧!它正在工作! 但是一旦再次輸入用戶名,它不會更新數據庫。雖然,它顯示敬酒「用戶名更新!」 有什麼問題updateUsername()? –

+0

@K_K:看我的編輯答案也許有幫助。你的代碼是正確的只需要一些驗證 –

+0

沒關係!它是updateUsername()方法。將「KEY_ROWID +」=「+ 0」更改爲「KEY_ROWID +」=「+ 1」 非常感謝您的幫助! –