У меня на форме есть jList в котором отображен список слов из ячейки word в БД SQLite. Я выбираю слово в нем и помещаю его в строчную переменную, которую затем помещаю в запрос на вывод ячейки meaning находящуюся в таблице Wrd. Для последующего вывода содержимого meaning в jTextArea. Вроде выглядит работоспособно, но почему-то результата нет, я не могу понять где я ошибся.
public class Frmt extends javax.swing.JFrame {
Connection c=null;
//Вывожу из бд в jList
public void LoadList(){
try {
String qry = "Select * from Wrd;";
PreparedStatement pst = c.prepareStatement(qry);
ResultSet rs = pst.executeQuery();
DefaultListModel dlm = new DefaultListModel();
while(rs.next()) {
dlm.addElement(rs.getString("word"));
}
jList1.setModel(dlm);
pst.close();
rs.close();
} catch(Exception e) {
}
}
//Вывожу в jTextArea
public void getList() {
try{
String std = jList1.getSelectedValue();
String qry = "Select meaning from Wrd where word = '"+std+"';";
Statement st = c.createStatement();
ResultSet rs = st.executeQuery(qry);
while(rs.next()) {
jTextArea1.setText(rs.getString("meaning"));
}
st.close();
rs.close();
} catch(Exception e) {
}
}
public Frmt() {
initComponents();
try {
Class.forName("org.sqlite.JDBC");
c=DriverManager.getConnection("jdbc:sqlite:Words.db");
System.out.println("Connected");
} catch(Exception e) {
}
LoadList();
getList();
}
jList заполняется нормально. В getList ошибки не происходит. Запрос (qry) принимает значение: Select * from Wrd where word = 'null'
Select * from Wrd where word = 'null'
Это означает, что jList1.getSelectedValue(); возвращает null. Происходит это из-за того, что в списке нет ни одного выбранного элемента.
Варианты решения:
Установить какое-либо из слов выбранным по-умолчанию, с помощью JList.setSelectedIndex. Например, первое по порядку:
jList1.setModel(dlm);
jList1.setSelectedIndex(0);
....
Подписаться на событие изменения выбранного значения в списке и перезаполнять jTextArea1 когда пользователь выберет слово. Пример можете посмотреть в официальном уроке: «How to Write a List Selection Listener»
P.S. Построение запроса путем слияния строк потенциально опасно. Почитайте: «Внедрение SQL кода» и научитесь передавать параметры в запросы (урок: «Using Prepared Statements»).
P.P.S. Еще странно, что в вопросе получается select *, а не select meaning как написано.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости