2016-11-18 44 views
0

我正在研究SQLite Android應用程序。在將數據插入表中時,我想擺脫任何重複項。
我的代碼:從DatabaseHelper類Android SQLite輸入重複

方法(RCOL_2爲String):

public Cursor getResourceName(String condition) { 
    SQLiteDatabase sqLiteDatabase = this.getReadableDatabase(); 
    Cursor cursor = sqLiteDatabase.rawQuery("SELECT " + RCOL_2 + " FROM " + RESOURCE_TABLE + " WHERE " + RCOL_2 + " = " + "'" + condition + "'", null); 
    return cursor; 
} 

MainActivity:

public boolean checkResourceDuplicates(String insert) { 
    Cursor result = databaseHelper.getResourceName(insert); 
    StringBuffer buffer = new StringBuffer(); 
    ArrayList<StringBuffer> values = new ArrayList<>(); 

    while (result.moveToNext()) { 
     buffer.append(result.getString(0)); 
    } 
    values.add(buffer); 

    for (int i=0; i < values.size(); i++) { 
     if(values.get(i).toString().equals(insert)){ 
      return true; 
     } 
    }return false; 
} 



public void addResource() { 
    btnAddResource.setOnClickListener(
     new View.OnClickListener() { 
      public void onClick(View v) { 
       if(checkResourceDuplicates(editResourceName.getText().toString())) { 
        Toast.makeText(MainActivity.this, "Duplicate", Toast.LENGTH_LONG).show(); 
       }else{ 
        boolean isInserted = databaseHelper.insertResource(editResourceName.getText().toString(), addCategoryID(spinner.getSelectedItem().toString())); 
        if (isInserted == true) { 
         editResourceName.setText(null); 
         Toast.makeText(MainActivity.this, "Resource added", Toast.LENGTH_LONG).show(); 
        } else { 
         Toast.makeText(MainActivity.this, "Resource not added", Toast.LENGTH_LONG).show(); 
        } 
       } 
      } 
     } 
    ); 
} 

現在,它允許添加到數據庫中,例如:'a'和'A'。 我試着用equalsIgnoreCase方法,從數據庫中選擇較低的......並且什麼也沒有。在最好的情況下,我設法防止在添加'aaaa'之後添加'AaAa',但在'AaAa'之後添加'aaaa'被允許。

我試過SELECT LOWER(column_name),將它添加到數組列表中,將插入值轉換爲lowerCase並匹配它們。沒有工作。我不想在我的數據庫中添加垃圾表來驗證這一點。

回答

1

如果我按照你的問題..你需要將你的文本轉換爲小寫,然後將其插入到一個單獨的列>>應用它的獨特屬性..並插入insertWithOnConflict ..類似的東西。

在創建表..

KEY_NAME+" TEXT UNIQUE" 

和插入數據作爲。

db.insertWithOnConflict(TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_IGNORE); 
+0

沒有創建附加表的方法嗎? – Mariachi

+1

無需創建額外的表格。只需在「RESOURCE_TABLE」中添加一列即可。這將保存您的origenal文本的小寫字母。通過這種方式,您可以在特定的桌子上應用唯一。 –

+0

那麼爲什麼SELECT LOWER(column_name),將它添加到數組列表中,將插入值轉換爲lowerCase並匹配它們不起作用?這對我來說絕對沒有意義... – Mariachi