Рейтинг:
1
Richard MacCutchan
Ваш оператор SQL будет соответствовать всем именам. Вам нужно изменить его с помощью параметра, который указывает имя, введенное пользователем.
Member 13780097
Не могли бы вы показать мне, как это сделать? Я попробовал с pst.setString(1, variable_name), но у меня есть его ошибка: java.lang.ArrayIndexOutOfBoundsException: 0
Member 13780097
У меня возникла ошибка в этой строке : pst.setString(1, userInputField.getText().toLowerCase().trim());
Richard MacCutchan
Я не вижу в этом утверждении ничего очевидного. Пожалуйста, отредактируйте свой вопрос и покажите больше кода.
Member 13780097
Я опубликовал полный метод, который использовал. Надеюсь, это поможет вам найти решение для меня
Richard MacCutchan
Ваш оператор SQL по-прежнему неверен, и вы не должны использовать LIKE, так как ищете запись с определенным именем. Это должно быть что-то вроде:
"select * from user where name = ?"
Возможно, вам придется проверить документацию на предмет точного синтаксиса.
Member 13780097
Спасибо за ваш ответ. Я попробовал ваше решение, но оно, похоже, не работает. Все работает с SQlite, но он просто не может извлекать данные на основе пользовательского ввода. Я попробовал это сделать:
Строка sql = "выберите имя, фамилию пользователя, где верхний(имя) Как верхний('"+quest+"') || '%'"; - он берет только из первого ряда. Я не знаю, является ли это версией SQLite, которая вызывает проблему.
Richard MacCutchan
Почему вы все еще используете подобную фразу, когда она вам не нужна? Просто используйте предложенный мной образец с правильным значением имени в параметре (правильно прописанным), или:
"select * from user where name = \"" + quest + "\";"
Member 13780097
Когда я использую ваш образец, ничего не возвращается:
String sql = "select * from user where name = ' " +quest+ " '; ";//nothing is found
Только подобное, кажется, работает. Я вот-вот сдамся! Вы думаете, это потому, что я использую SQLite?
Richard MacCutchan
Нет, скорее всего, это связано с тем, что вы не используете правильные значения для параметра name. Если имя в базе данных Норман, то передаваемое значение должно быть точно таким же, включая верхний регистр для начальной буквы и нижний регистр для остальных.
Вы можете проверить точное содержание, просто используя "SELECT * FROM user;".
Member 13780097
Я согласен с вами. Допустим, я использую "SELECT * FROM user;", а затем набираю "Paul", возвращается "Smith", что правильно. Но когда я набираю "Питер", снова возвращается "Смит", и SQLite, похоже, не знает, что он должен вернуть "Паркер". Я думаю, что использовал все возможности, чтобы помочь SQLite узнать, чего я хочу:
//String sql = "select * from user where name match ' ' ";//prints first row only
//String sql = "SELECT * FROM user WHERE name like ? ";//shows first row only
//String sql = "SELECT * FROM user WHERE LOWER(name) LIKE ?";
//String sql = "select * from user where name LIKE :name"; //show answer from first row only
String sql = "select * from user";//first row is returned
//String sql = "select * from user where name LIKE '"+quest+"' ";//showing first row only
//String sql = "select * from user where name = '%" + quest + "%' ";//nothing is retrieved from the db
//String sql = "select * from user where name=?";//not fetching any data
//String sql = "select * from user where name like 'a%'";
//String sql = "SELECT name, surname FROM user WHERE UPPER(name) LIKE UPPER('"+quest+"') || '%'";
//String sql = "select * from user where name like '%" + quest + "%'";//show from first row only
<code>
Richard MacCutchan
Похоже, что бы я ни предлагал (проверив это на своей системе), вы продолжаете делать все по-другому. И Вы, кажется, не понимаете, как на самом деле работает SQL. Когда вы входите "select * from user";
оно будет возвращайте каждую строку, но вам нужно обработать результаты, чтобы фактически отобразить их. Я предлагаю вам вернуться к документации Java и изучить, как обрабатывать результирующие наборы SQL.
Member 13780097
Спасибо Вам за ваше терпение и не сдавайтесь. Поверьте мне, я перепробовал все, что вы сказали, и даже прошел через документацию Java. Вы использовали SQLite, когда тестировали свою систему? Как бы я ни старался, эта часть, похоже, не работает. Можешь ли ты в конце концов показать мне все, что ты сделал? Может быть, это if(rs.next ()), который вызывает проблему, или я должен использовать createStatement вместо PreparedStatement. Большое спасибо!
Richard MacCutchan
Проработайте учебник, на который я дал вам ссылку, и посмотрите, как это сделать. Это то, что я сделал, и это работает правильно.