2012-03-08 2 views
1

У меня есть база данных и Java-программа. Я пытаюсь написать код, так что если в текстовом поле вводится MockID и нажата кнопка отправки, детали в соответствии с введенным идентификатором Mock должны быть извлечены из базы данных и отображены в текстовом поле. ниже - код, который я написал. Код теперь работает после поправок, которые я сделал. Однако в текстовом поле фактически не отображается соответствующая информация из этой записи для данного Mock Id, а только текст. Может ли кто-нибудь проконсультироваться?Java MySQL PreparedStatement SELECT Statement

JButton button = new JButton("Submit"); 
    button.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 


     String mockId = textField.getText();  

     try { 

      String sql = "SELECT MockID, Subject, Year, Date FROM mockexam WHERE MockID =?";  

      PreparedStatement prest = con.prepareStatement(sql); 
      prest.setString(1, mockId); 

      prest.executeQuery(); 
      textArea.append("MockID, Subject, Year, Date"); 
      JOptionPane.showMessageDialog(frmFindMock, "Record has been updated."); 


     } 

     catch (SQLException e) { 
     //System.out.println("Record couldn't be added!"); 
     e.printStackTrace(); 
     JOptionPane.showMessageDialog(frmFindMock, "Record couldn't be updated. Please try again."); 
     } 
     } 

     }); 

    button.setBounds(303, 60, 75, 23); 
    panel_1.add(button); 

ответ

1

The? является заполнителем переменной привязки. у вас есть только 1. так почему вы пытаетесь связать 4 вещи?

1

PreparedStatement Ваш имеет только один variable..ie MockID

ВЫБРАТЬ MockID, предмет, год, дата ОТ mockexam ГДЕ MockID =? .... поэтому следующие утверждения

   prest.setString(2, "Subject"); 
       prest.setString(3, "Year"); 
       prest.setString(4, "Date"); 

являются не требуется.

Update for your comments:

мы setString для всех переменных, которые представлены .... и вот только MockId переменная ..... Вы можете получить всю строку, если вы хотите, «?» используя «select *» ... но все же будет только один аргумент (представленный?) до PreparedStatement, и это ваш MockId.

+0

Я хотел бы, чтобы Mock ID, Subject, Year и Date отображались в результатах TextArea. Причина, почему у меня было WHERE MockID =? потому что информация должна отображаться для конкретного MockID, который вводит пользователь? – Pita

+0

Да, я знаю ... мы делаем setString для всех переменных, которые представлены «?» .... и здесь только MockId - это переменная ..... вы можете получить всю строку, если хотите, используя «select * "... но все же будет только один аргумент (представленный?) в PreparedStatement, и это ваш MockId –

4
 String sql = "SELECT MockID, Subject, Year, Date FROM mockexam WHERE MockID =?";  

     PreparedStatement prest = con.prepareStatement(sql); 
     prest.setString(1, "MockID"); 
     prest.setString(2, "Subject"); 
     prest.setString(3, "Year"); 
     prest.setString(4, "Date"); 

В этом проблема. В вашей строке sql вы создали место для 1 аргумента (указано ?), но затем вы попытались установить 4. Следовательно, вы вышли из пределов. Кроме того, поскольку вы жестко закодировали MockID, Subject, Year и Date в инструкции, нет причин использовать setString, чтобы попытаться установить их (неправильно).

Чтобы отобразить ответ в вашем сделать это:

ResultSet rs = prest.executeQuery(); 
String result; 
while(rs.next()) { 
    String id = rs.getString("MockID"); 
    String subject = rs.getString("Subject"); 
    String year = rs.getString("Year"); 
    String Date = rs.getString("Date"); 
    result += id + ", " + subject + ", " + year + ", " + date + "\n"; 
} 
textarea.append(result); 
+0

Мне хотелось бы, чтобы Mock ID, Subject, Year и Date отображались в результатах TextArea. Причина, почему у меня было WHERE MockID =? потому что информация должна отображаться для конкретного MockID, который вводит пользователь? – Pita

+0

Например: 'String sql =" SELECT MockID, Subject, Year, Date FROM mockexam WHERE MockID =? "; Подготовлено Утверждение pert = con.prepareStatement (sql); prest.setString (1, "1"); ' Выберет« КОЛОНКА »MockID, Subject, Year и Date из базы данных для любой записи с помощью' MockID = 1' – twain249

+0

О, я понимаю, что вы имеете в виду. Я попытаюсь внести изменения в код, так как знаю, что вы имели в виду :) – Pita

0

«Дата» не является хорошим выбором для имени столбца. Это зарезервированное слово в каждой базе данных, о которой я знаю. Это не очень информативно для пользователей. Дата рождения? Дата смерти? Дата заказа? Что это значит?

Я бы начал с перехода на «EXAM_DATE» или что-то еще и посмотрел, помогает ли это.

0
String sql = "SELECT MockID, Subject, Year, Date FROM mockexam WHERE MockID =?";  

При подготовке этого заявления, вы «сказать», что вы будете давать значение для каждого ?. Здесь у вас есть только один, но вы определили 4 из них позже:

PreparedStatement prest = con.prepareStatement(sql); 
    prest.setString(1, "MockID"); 
    prest.setString(2, "Subject"); 
    prest.setString(3, "Year"); 
    prest.setString(4, "Date"); 

И не забудьте закрыть соединение, заявление и возможный набор результатов, чтобы избежать утечек памяти.

+0

Мне хотелось бы, чтобы Mock ID, Subject, Year и Date отображались в результатах TextArea. Причина, почему у меня было WHERE MockID =? потому что информация должна отображаться для конкретного MockID, который вводит пользователь? – Pita