отображать данные из базы данных в текстовой метке, используя SQL java - PullRequest
0 голосов
/ 14 марта 2020

Здравствуйте, разработчики! Я новичок в java программировании и разрабатываю приложение для викторин, используя java Я пытался отображать вопросы один за другим в jtextlabel, но я не хотел, чтобы при нажатии кнопки появлялись вопросы один за другим. после ответа на вопрос этот код:

private void btnmathActionPerformed(java.awt.event.ActionEvent evt) {
    Item item = new Item();

        String sql = "SELECT * FROM `question` WHERE 1";
        Mysqlconnection con = new Mysqlconnection();
        Connection connect = con.getConnection();
        Statement statement = null;

        try {
            statement = connect.createStatement();
            ResultSet rs = statement.executeQuery(sql);
            ArrayList<Item> items = new ArrayList<Item>();
            while(rs.next()){
                //rs.next()
                item.setId(rs.getInt("Id"));
                item.setQuestion(rs.getString("Question"));
                item.setCategory(rs.getString("Category"));

                items.add(item);



            }


            //this.jLabel2.setText();


        } catch (Exception ex) {

        } finally {
            try {

                connect.close();
                statement.close();
            } catch (SQLException ex) {
                Logger.getLogger(ItemdDao.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
    } 

Буду очень признателен всем, кто мне поможет
спасибо

1 Ответ

0 голосов
/ 20 марта 2020

Я не совсем понимаю, о чем здесь говорят. Не могли бы вы дать немного больше разъяснений о том, с чем вы боретесь? Пока я здесь, я сделаю несколько конструктивных комментариев к вашему коду. Обычно StackOverflow не место для «проверки кода», хотя, как вы новичок, я надеюсь, что это окажется конструктивным, и я постараюсь дать некоторые пояснения для своих комментариев. Как новичку, определенно стоило бы проконсультироваться с некоторыми онлайн-ресурсами по основам Java, такими как CodeAcademy, w3schools или tutorialspoint.

Во-первых, важно дать переменным ясные имена - например, Item довольно GENERI c. Вместо этого вы можете вызывать класс Question, чтобы сразу было понятно, что этот класс представляет для любого, кто читает код.

Еще один способ сделать код понятным - включить операторы импорта в верхней части кода. , Таким образом, когда вы объявляете переменную импортированного типа, операторы в коде могут быть более краткими, например:

import java.awt.event.ActionEvent;
...
    private void btnmathActionPerformed(ActionEvent evt) {
       ...
    }

Во-вторых, стоит понять, как создаются и хранятся объекты. Стоит прочитать этот ресурс: https://www.w3schools.com/java/java_classes.asp. В качестве примера рассмотрим код ниже:

Item item1 = new Item();
item1.setID(1);

Item item2 = item;
item2.setID(2);

System.out.println("Item 1 ID: " + item1.getID());
System.out.println("Item 2 ID: " + item2.getID());

Во-первых, мы создаем новый объект класса Item. Переменная item1 технически содержит «указатель» на местоположение этого нового объекта в памяти. Далее мы определяем item2, однако в этом объявлении мы не создаем экземпляр нового Item, вместо этого мы устанавливаем item2 равным item1. Это означает, что item2 теперь содержит тот же «указатель», что и item1, и поэтому они оба указывают на один и тот же объект в памяти! Поэтому, когда мы модифицируем item1, мы также модифицируем item2 и наоборот.

Поэтому вышеприведенный код выводит следующее:

Item 1 ID: 2
Item 2 ID: 2

Для того, чтобы получить желаемый Поведение, мы должны убедиться, что мы создаем экземпляр нового объекта для item2 следующим образом:

Item item1 = new Item();
item1.setID(1);

Item item2 = new Item();
item2.setID(2);

System.out.println("Item 1 ID: " + item1.getID());
System.out.println("Item 2 ID: " + item2.getID());

Это будет печатать:

Item 1 ID: 1
Item 2 ID: 2

В вашем коде вы создаете экземпляр item в внешней области видимости, и неоднократно модифицируйте этот же объект, добавляя его в ArrayList снова и снова. Это означает, что каждый элемент в вашем ArrayList указывает на один и тот же объект с точно такими же id, question и category. Поскольку вам нужно несколько различных элементов, вы должны убедиться, что каждый раз создаете новый объект.

Вам следует также стремиться объявлять переменные в максимально узкой области видимости, чтобы ограничить продолжительность их нахождения в памяти (если нет веских причин для иного). item используется только внутри вашего while l oop, поэтому вы должны объявить его там.

Вы также должны убедиться, что в rs есть элементы, прежде чем пытаться их использовать. Поэтому я бы изменил ваш код следующим образом:

if (!rs.next() ) {
    System.out.println("Returned ResultSet is empty!");
} else {
    do {
        Question question = new Question(); // Instantiate a new Question object
        question.setId(rs.getInt("Id"));
        question.setQuestion(rs.getString("Question"));
        question.setCategory(rs.getString("Category"));
        questions.add(question);
    } while (rs.next());
}

Как указано выше, просьба дать дополнительные разъяснения о том, с чем вы боретесь, и я постараюсь дать ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...