У меня на форме есть 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
как написано.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Мне нужно пропарсить веб страницу в java, на которой необходимо сперва залогиниться ввести пароль и тдЧитал в интернете , это делают через htmlunit