Я пытаюсь получить информацию из базы данных, чтобы заполнить Jcombobox, я пытаюсь использовать следующие коды, но они не работают, во всех из них поле со списком не очищается, когда.
Первая попытка
try {
con = Connectionz.getConnection();//Connection Object
pst = con.prepareStatement("SELECT * AS achooserfill FROM Login_Users WHERE [C Team Lead] =?");
pst.setString(1, va);
rs = pst.executeQuery();
while (rs.next()) {
achooser.removeAll();
achooser.addItem("Please select agent");
achooser.addItem(rs.getString("achooserfill"));
}
}catch(Exception e){
System.err.println(e);
}
Вторая попытка
try {
con = Connectionz.getConnection();//Connection Object
pst = con.prepareStatement("SELECT * FROM Login_Users WHERE [C Team Lead] =?");
pst.setString(1, va);
rs = pst.executeQuery();
while (rs.next()) {
achooser.removeAll();
achooser.addItem("Please select agent");
achooser.addItem(rs.getString("[VA #]"));
}
}catch(Exception e){
System.err.println(e);
}
Третья попытка
try {
con = Connectionz.getConnection();//Connection Object
pst = con.prepareStatement("SELECT [VA #] FROM Login_Users WHERE [C Team Lead] =?");
pst.setString(1, va);
rs = pst.executeQuery();
while (rs.next()) {
achooser.removeAll();
achooser.addItem("Please select agent");
achooser.addItem(rs.getString("[VA #]"));
}
}catch(Exception e){
System.err.println(e);
}
Во всех случаях результат один и тот же,
Я был бы очень признателен за любую информацию или любой ресурс, чтобы исправить ситуацию
Что такое va? Вы пробовали выполнять свои SQL-запросы? Что возвращает SELECT * FROM Login_Users WHERE [C Team Lead] = ?, когда вы заменяете ? на va и запускаете его?
Также (просто любопытно), почему вы добавляете Please select agent в свой ComboBox для каждого результата?
@BillHorvath Я только что создал [chooser] Я просто создаю объект с помощью netbeans, нужно ли мне создавать объект с кодом и определять конкретную функцию, чтобы это разрешить? (Извини, новичок)
@ user2004685 спасибо за быстрый ответ, va - это переменная, которая определяется, как только пользователь входит в систему, это уникальный номер для идентификации пользователя. а если подставить? это не работает, и вы правы, мне нужно временно убрать эти два запроса, спасибо !!!
И все ваши циклы начинаются с renoveAll. В чем смысл использования цикла, когда вы WIPE всего существующего контента на каждой итерации?




in all of them the combo box is not being cleaned.
achooser.removeAll();
Метод removeAll() является методом Container, а не комбинированным списком.
Ты хочешь:
achooser.removeAllItems();
чтобы удалить элементы из поля со списком.
И этот оператор должен быть вне цикла.
Кроме того, для чего-то подобного вы даже проверяли, что ваш ResultSet содержит данные. Сначала вы должны просто жестко закодировать данные, чтобы доказать, что метод addItem() работает. Затем, когда вы узнаете, что логика работает, вы делаете код более динамичным, получая данные из базы данных.
спасибо, теперь поле со списком очищено, но это единственный элемент, доступный в поле со списком, теперь дело в том, чтобы заполнить поле новой информацией.
@AlexGalvis, я уже рассказывал, как решить эту проблему. Сначала просто добавьте жестко закодированные данные, чтобы доказать, что ваш код выполняется. Затем, как только это сработает, вы получите данные из базы данных. Поэтому вам нужно добавить код отладки, чтобы убедиться, что ваш цикл даже выполняется, и вы получаете действительные данные. Не думайте, что ResultSet содержит данные. Докажите это с помощью отладочного кода. Если в вашем ResultSet есть данные, тогда будет работать метод addItem (...).
спасибо за все, что я просто использовал набор результатов в таблице, чтобы увидеть, что я получаю, и он пуст. Я изменю запрос и протестирую. ТЫ УДИВИТЕЛЬНЫЙ!
@AlexGalvis, I just used the resultset to table to see what I was getting and is empty - все, что вам нужно было сделать, это добавить оператор System.out.println(...) внутри цикла, чтобы увидеть, какие значения находятся в ResultSet. Сделайте отладку простой. System.out.priintln (...) - это ваша попытка определить, соответствует ли ваш логический поток тому, чего вы ожидаете.
Мне нравится комментарий @ camickr, поэтому я пересматриваю свой ответ. Попробуйте заполнить модель из набора результатов, а затем объявить JComboBox:
MutableComboBoxModel model = new DefaultComboBoxModel();
while (rs.next()){
model.addItem(rs.getString("achooserfill"));
}
JComboBox achooser = new JComboBox(model);
Да, но по умолчанию используется модель DefaultComboBoxModel.
Обратите внимание, что я давно не работал со Swing. Возможно, вы обнаружите, что лучше объявить модель, добавить отдельные позиции в модель, а затем создать средство выбора после того, как модель будет заполнена.
@BillHorvath благодарит за ваш ответ и информацию, я создал модель, но не работает, поэтому, если я правильно понимаю, что я должен попытаться сделать, это создать модель DefaultCombobox, добавить элементы в модель и после этого назначить модель для выборщик? еще раз спасибо
@AlexGalvis, в этом нет необходимости. Как я уже объяснил, по умолчанию используется модель DefaultComboBoxModel. Не сбивайтесь с пути. Если метод removeAllItems () работает, это доказывает, что вы можете динамически изменять данные.
Try populating the model from the resultset, - откуда вы вообще знаете, что в ResultSet есть данные? Такой вопрос даже не следует задавать. Сначала это следует протестировать с использованием статических жестко закодированных данных, чтобы доказать, что логика добавления элементов в поле со списком вызывается.
Я в принципе согласен, но задавался не этот вопрос, и в любом случае, если в результирующем наборе ничего нет, модель (и, следовательно, поле со списком) будет пустым.
but that wasn't the question that was asked - да, но иногда вам нужно читать между строк, чтобы понять контекст всего вопроса. Всякий раз, когда я вижу вопрос относительно ResultSet, первое, что я прошу OP, - это избавиться от ResultSet и жестко закодировать данные, а не делать предположения, которые ставят OP в погоню за диким гусем. Тогда у нас будет больше информации для решения проблемы.
Кроме того, вам не следует предлагать создать новый JComboBox. Вам следует просто обновить существующее поле со списком с помощью метода setModel(...), если вы используете этот подход. Таким образом, вам не нужно беспокоиться о добавлении вновь созданного поля со списком во фрейм и повторной проверке фрейма.
Ага; Я куплю это - setModel был бы намного лучше. Хороший улов.
Вероятно, проблема не в получении набора результатов. Вы можете поделиться кодом, в котором вы объявляете и настраиваете
achooser?