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并匹配它们。没有工作。我不想在我的数据库中添加垃圾表来验证这一点。
没有创建附加表的方法吗? – Mariachi
无需创建额外的表格。只需在“RESOURCE_TABLE”中添加一列即可。这将保存您的origenal文本的小写字母。通过这种方式,您可以在特定的桌子上应用唯一。 –
那么为什么SELECT LOWER(column_name),将它添加到数组列表中,将插入值转换为lowerCase并匹配它们不起作用?这对我来说绝对没有意义... – Mariachi