Вывод запроса из бд SQLite в jTextArea

234
25 апреля 2018, 07:57

У меня на форме есть 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'

Answer 1
Select * from Wrd where word = 'null' 

Это означает, что jList1.getSelectedValue(); возвращает null. Происходит это из-за того, что в списке нет ни одного выбранного элемента.

Варианты решения:

  1. Установить какое-либо из слов выбранным по-умолчанию, с помощью JList.setSelectedIndex. Например, первое по порядку:

    jList1.setModel(dlm);
    jList1.setSelectedIndex(0);
    ....
    
  2. Подписаться на событие изменения выбранного значения в списке и перезаполнять jTextArea1 когда пользователь выберет слово. Пример можете посмотреть в официальном уроке: «How to Write a List Selection Listener»

P.S. Построение запроса путем слияния строк потенциально опасно. Почитайте: «Внедрение SQL кода» и научитесь передавать параметры в запросы (урок: «Using Prepared Statements»).
P.P.S. Еще странно, что в вопросе получается select *, а не select meaning как написано.

READ ALSO
Своя коллекция LinkedList

Своя коллекция LinkedList

Почему при добавлении в коллекцию элементов, выдает null ??

266
Использование final аргумента в локальном классе

Использование final аргумента в локальном классе

Без всяких лишних слов напишу код:

230
Парсинг(Скрапинг) web-стриниц

Парсинг(Скрапинг) web-стриниц

Мне нужно пропарсить веб страницу в java, на которой необходимо сперва залогиниться ввести пароль и тдЧитал в интернете , это делают через htmlunit

202