2016-10-13 2 views
1

Мне нужно создать программу, запрашивающую данные из базы данных mysql. (в полной программе он также должен иметь возможность создавать, изменять и удалять строки, но я уже застрял в показе). То, как я пошел на это, установил соединение с jdbc. Затем выполните запрос и поместите его в набор результатов. Затем с помощью оператора if, чтобы получить первую строку информации с помощью resultset.next и кучу методов parsestring и settext.Привязка Actionlistener (button) к Resultset.next

Следующим шагом является следующая и предыдущая кнопка для прокрутки набора результатов и отображения информации.

Мой план состоял в том, чтобы поместить rs.next() в actionlistener и повторить все setTexts на текстовых полях с новыми строками, но я попытался использовать 100 разных способов, но я все равно получаю ошибки в одном направлении или другой.

Кто-то также предложил мне попробовать и установить actionlistener для добавления 1 к переменной. И затем добавив остальную часть кода в класс, где я могу назвать его методом, но я не знаю, как сделать такой метод.

Любая помощь была бы потрясающей. Я кодирую всего лишь несколько недель, и я чувствую, что у меня на голове. Поэтому, если есть какие-то другие вещи, которые я делаю неправильно, скажите мне. Приветствия

Кодекса

package duo.opdracht.info.pagina; 

import javax.swing.*; 
import java.awt.event.*; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.sql.*; 

public class DUOOpdrachtInfoPagina extends JFrame { 

    public static void main(String[] args) { 
    JFrame frame = new DUOOpdrachtInfoPagina(); 
    frame.setSize(1000, 750); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setTitle("Optredens"); 
    frame.setContentPane(new Paneel()); 
    frame.setVisible(true); 

    } 
} 

class Paneel extends JPanel { 

    private JButton volgendeKnop, vorigeKnop; 
    private JTextField bandArtiestVak, starttijdVak, eindtijdVak, podiumVak; 
    private JLabel bandArtiestLabel, starttijdLabel, eindtijdLabel, podiumLabel; 

    public Paneel() { 
    setLayout(null); 

    volgendeKnop = new JButton("Volgende"); 
    volgendeKnop.addActionListener(new ButtonHandler()); 
    vorigeKnop = new JButton("Vorige"); 

    bandArtiestVak = new JTextField(20); 
    starttijdVak = new JTextField(20); 
    eindtijdVak = new JTextField(20); 
    podiumVak = new JTextField(20); 

    bandArtiestLabel = new JLabel("Artiest/Band: "); 
    starttijdLabel = new JLabel("Starttijd: "); 
    eindtijdLabel = new JLabel("Eindtijd: "); 
    podiumLabel = new JLabel("Podium: "); 

    volgendeKnop.setBounds(850, 600, 100, 25); 
    vorigeKnop.setBounds(50, 600, 100, 25); 
    bandArtiestVak.setBounds(200, 100, 300, 25); 
    starttijdVak.setBounds(200, 130, 300, 25); 
    eindtijdVak.setBounds(200, 160, 300, 25); 
    podiumVak.setBounds(200, 190, 300, 25); 
    bandArtiestLabel.setBounds(100, 100, 300, 25); 
    starttijdLabel.setBounds(100, 130, 300, 25); 
    eindtijdLabel.setBounds(100, 160, 300, 25); 
    podiumLabel.setBounds(100, 190, 300, 25); 

    bandArtiestVak.setEditable(false); 
    starttijdVak.setEditable(false); 
    eindtijdVak.setEditable(false); 
    podiumVak.setEditable(false); 

    add(volgendeKnop); 
    add(vorigeKnop); 
    add(bandArtiestVak); 
    add(starttijdVak); 
    add(eindtijdVak); 
    add(podiumVak); 
    add(bandArtiestLabel); 
    add(starttijdLabel); 
    add(eindtijdLabel); 
    add(podiumLabel); 

    // create our mysql database connection 
    try { 
     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/DUO_1", "duo1", "duo1"); 

     Statement stmt = null; 
     String query 
       = "SELECT BandArtiestNaam, Starttijd, Eindtijd, Podiumnaam FROM optreden"; 

     stmt = conn.createStatement(
       ResultSet.TYPE_SCROLL_INSENSITIVE, 
       ResultSet.CONCUR_READ_ONLY); 

     ResultSet rs = stmt.executeQuery(query); 
     if (rs.next()) { 
     String naam = rs.getString(1); 
     String stijd = rs.getString(2); 
     String etijd = rs.getString(3); 
     String pnaam = rs.getString(4); 

     bandArtiestVak.setText(naam); 
     starttijdVak.setText(stijd); 
     eindtijdVak.setText(etijd); 
     podiumVak.setText(pnaam); 

     } 
    } catch (SQLException e) { 
     System.out.println(e); 
    } 
    } 

    class ButtonHandler implements ActionListener { 

    public void actionPerformed(ActionEvent e) { 

    } 
    } 
} 
+0

* «Любая помощь вообще будет потрясающей». * Как и в конкретном вопросе .. –

+0

@AndrewThompson Да, Извините, может быть, я должен был сформулировать это по-другому. Я добавил это предложение, чтобы указать, что даже малейший намек, подсказка, трюк или источник для изучения будут полезны, поэтому люди не чувствуют необходимости писать всю программу для меня. Мне просто нужно какое-то общее направление. –

ответ

1

Разбейте вашу проблему вниз на различные проблемы, вы не должны иметь класс, который делает абсолютно все, что в вашем приложении. Вы найдете, как вы сейчас, что, когда у вас есть проблемы, очень сложно отследить, намного сложнее, чем вы могли себе представить. Скорее начнем с разбивки этой проблемы на управляемые куски, это действительно все программирование.

  • View - фактические Качели панели с другими панелями, это не должно быть ничего другого, чем просто набор панелей и кнопок, не имеет никакого кода SQL там, и не имеет какого-либо (или очень просмотр) слушателей, абсолютно ничего, кроме взгляда.
  • Dao (объект доступа к данным) - этот класс имеет весь ваш код SQL, единственное, что он делает, это выполнять операции CRUD. Он может сделать некоторые другие вещи, чтобы изменить набор результатов на что-то более значимое, может быть хорошей идеей содержать результирующий набор для этого класса, поскольку это вызывает беспокойство у dao. В общем, люди используют такие вещи, как hibernate, вместо написания кода SQL, но вы можете делать все как угодно, но я рекомендую вам проверить это.
  • Контроллер - это будет связь между вашим представлением и вашим Дао. Он будет использовать оба параметра в качестве своего конструктора. Контроллер добавит слушателей действий туда, где им нужно, в вашем представлении, вставьте любые входы из представления и вызовите Dao с соответствующими входными аргументами и верните его обратно в представление по мере необходимости.

Это шаблон проектирования, называемый MVC - (контроллер вида модели), различные варианты существуют для различных приложений desktop/web ect. Это позволит вам разделить каждую проблему на соответствующий компонент и проверить, работает ли каждый из них, и где проблема. Вы сможете протестировать, например, Dao, без необходимости создавать представление и добавлять слушателей. Похоже, вы учитесь, поэтому я настоятельно рекомендую вам изучить этот шаблон дизайна. Вы обнаружите, что не можете сделать существенное приложение с вашим текущим дизайном, поскольку проблемы становятся все труднее отслеживать, а новые функции сложнее добавить.

Еще несколько вещей, вы должны просто преобразовать весь набор результатов во что-то более значимое, оно уже загружено. Использование rs.next каждый раз, когда вы хотите, чтобы новая строка означала, что вы не можете закрыть набор результатов, и вы, вероятно, будете иметь все эти предупреждения о ресурсах. В противном случае проверьте спящий режим. Мне очень понравился этот сайт, когда я начинал изучать программирование на Java, предлагаю вам проверить его. https://www.caveofprogramming.com/java-design-patterns/mvc-example.html

Смежные вопросы