Прежде всего, я объясню мой случай использования:Эффективный способ сравнения входных данных с Sql таблицы в Java
Я получаю массив строк имен от пользователя (Can размера 2,5,1)
e.g Suppose user input is like this:
String[] names={"Micheal", "Joe","Jim"}
Теперь, после ввода ввода от пользователя, мне нужно нажать таблицу SQL, названную «ПОЛЬЗОВАТЕЛИ», и проверить, присутствуют ли все эти имена в таблице USERS или нет. Если какого-либо имени нет, верните значение false. Если все имена присутствуют в таблице USERS, верните значение true.
Моя идея:
Моя идея заключается в том, чтобы ударить таблицу ПОЛЬЗОВАТЕЛЕЙ. Получите все имена таблицы USERS в массиве String (названы как all_names), а затем сравните мою входную строку (имена i.e) с этой строкой all_names String. Поэтому, если имена являются подмножествами all_names, тогда верните true else return false.
Проблема:
Но я думаю, что это не является эффективным решением. Когда эта таблица будет расширяться, у меня будет тысячи записей, поэтому этот метод будет очень исчерпывающим. Любое другое лучшее и эффективное решение для этого, пожалуйста.
Обновлено Решение:
Пусть имена в таблице USERS являются уникальными.
Спасибо за ваши ответы. Теперь я принял этот подход, получив помощь от ваших ответов. Я хочу знать, что это решение лучше всего подходит или нет:
String[] names={"Micheal","Jim","Joe"};
String list2string = StringUtils.join(names, ", ");
//connection was established previosuly
stmt = conn.createStatement();
System.out.println(list2string);
rs = stmt.executeQuery("SELECT COUNT(*) AS rowcount FROM USERS WHERE name IN (" +
list2string +
")");
rs.next();
int count = rs.getInt("rowcount");
rs.close();
if(names.length==count){
System.out.println("All names are in users table");
}else{
System.out.println("All names are not present in users table");
}
Хотите получить ваши комментарии к этому обновленному решению.
С уважением
@atishshimpi Не можете понять ваш комментарий. Но что, если бы пользователь предоставил мне 100 имен? Так должен ли я запустить цикл 100 раз? Я думаю, это неэффективно. – Mr37037
Всегда будут уникальные имена? – dosdebug
@ Mr.777 Я выбрал имя в качестве примера здесь. Но атрибут, для которого я хотел получить решение, всегда останется уникальным в sql-таблице. – Mr37037