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