2014-11-08 2 views
2

То, что я пытаюсь сделать, это получить значения из столбца в моей таблице SQL, в частности столбца с именем SubjectName. Когда у меня есть эти значения, я хочу создать JButtons, названный для каждого значения в ResultSet. Мой текущий код подключается к моей базе данных, и насколько я могу сказать, что запрос к таблице также работает, однако, когда я пытаюсь сгенерировать и добавить эти кнопки в свой экран, try/catch возвращает только то, что мой оператор не удалось. Код вызывает проблемы лежит где-то здесь:Создание панели JButtons со значениями из таблицы SQL;

try 
    (
     Statement initializeDisplay = connect.createStatement() 
    ){ 

    ArrayList<String> buttonList = new ArrayList<String>(); 
    try 
    { 
     ResultSet rs = initializeDisplay.executeQuery("SELECT SubjectName from subjectpacktable order by SubjectID"); 
     buttonList = new ArrayList<String>(); 

     while(rs.next()) 
     { 
      buttonList.add(rs.getString(1)); 
     } 

     ArrayList<JButton> listOfButtons = new ArrayList<JButton>(); 
     for (int i=0; i < 10; i++) 
     { 
      String temp2 = rs.getString(l); 
      JButton button1 = new JButton(temp2); 
      listOfButtons.add(button1); 
      l++; 
     } 
     l = 0; 
     while(listOfButtons.get(l) != null) 
     { 
      JButton tempButton = listOfButtons.get(l); 
      AddCardPanel1.add(tempButton); 
      l++; 
     } 
     while(buttonList.get(l) != null) 
     { 
      System.out.println(buttonList.get(l)); 
      l++; 
     } 
     l = 0; 
    } 
    catch(SQLException e1) 
    { 
     System.err.println("Initial Display Failed"); 
    }} catch (SQLException e2) 
    { 
     System.err.println("Initial Display Failed"); 
    } 

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

+0

Рекомендация № 1: Улучшение этих уловов блоков таким образом, они говорят вам что-то полезное. По крайней мере, напечатайте стек. то есть 'e1.printStackTrace();' и аналогично для e2, 'e2.printStackTrace();' –

+0

После того, как вы перебираете свой результирующий набор внутри while, вы пытаетесь получить данные из набора результатов в этой команде: 'String temp2 = rs.getString (l); ' Вероятно, это источник ошибки. – Dalton

+0

@Dalton Как бы вы рекомендовали устранить эту проблему? Я вернулся и попытался взять значения из набора результатов и поместить их прямо в список кнопок, однако ошибки все еще сохраняются. Возможно ли, что значения в resultSet не получены правильно? – casey1229j

ответ

1

Вместо петли в то время, сделать

for(int i=0;i<buttonList.size();i++) 
{ 
    System.out.println(listOfButtons.get(i).getText()); 
} 

это должно держать ваш индекс внутри границ массива

0

Спасибо за помощь всем! Я использовал @Dalton и @ BartHofma's reccommendations и получил код и работает.

Вот рабочий код:

try 
    (
     Statement initializeDisplay = connect.createStatement(); 
    ) 
    { 

    try 
    { 
     ResultSet rs = initializeDisplay.executeQuery("SELECT SubjectName from subjectpacktable order by SubjectID"); 

     ArrayList<JButton> listOfButtons = new ArrayList<JButton>(); 
     while(rs.next()) 
     { 
      String temp2 = rs.getString("SubjectName"); 
      JButton button1 = new JButton(temp2); 
      listOfButtons.add(button1); 
      l++; 
     } 

     for(int i=0;i<listOfButtons.size();i++) 
     { 
      JButton holderButton = listOfButtons.get(i); 
      final String SubjectString = listOfButtons.get(i).getText(); 
      holderButton.addActionListener(new ActionListener(){ 

       @Override 
       public void actionPerformed(ActionEvent e) 
       { 

        try 
        { 
         Class.forName("com.mysql.jdbc.Driver"); 
        } 
         catch (ClassNotFoundException e1) 
         { 
          System.err.println("Connection Failed"); 
        } 
        System.out.println("Driver Connected"); 

        Connection connect = null; 
        try 
        { 
         connect = DriverManager.getConnection 
           ("jdbc:mysql://localhost:3306/example","root","root1229"); 
        } 
         catch (SQLException e1) 
         { 
          System.err.println("Connection Failed"); 
         } 
        System.out.println("Database Connected"); 

        String addCardStatement; 
        k++; 
        int cardID = 0; 
        cardID += k; 
        String cardFront; 
        String cardBack; 
        cardFront = JOptionPane.showInputDialog("What would you like to name the card?"); 
        cardBack = JOptionPane.showInputDialog("What would you like to define the card as?"); 
        addCardStatement = "INSERT INTO " + SubjectString + "VALUES (" + cardID + "," + SubjectString + "," + cardFront + "," + cardBack + ")"; 
        try 
        { 
         Statement addStatement = connect.createStatement(); 
         addStatement.executeUpdate(addCardStatement); 
        } 
         catch (SQLException e1) 
         { 
          System.err.println("Statement failed"); 
         } 


       }}); 

      AddCardPanel1.add(holderButton); 
     } 
    } 
    catch(SQLException e1) 
    { 
     System.err.println("Initial Display Failed"); 
     e1.printStackTrace(); 
    }} catch (SQLException e2) 
    { 
     System.err.println("Initial Display Failed"); 
     e2.printStackTrace(); 
    } 
Смежные вопросы