2016-11-18 42 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