Java MySQL PreparedStatement Instruction SELECT
J'ai une base de données et d'un Programme Java. Je suis en train d'écrire un code, de sorte que si dans un textfield un MockID est entré, et de le soumettre bouton est enfoncé, les détails selon entré Maquette ID doit être récupéré à partir de la base de données et les afficher dans un textarea. ci-dessous le code que j'ai écrit. Le code fonctionne maintenant après les modifications que j'ai faites. Toutefois, dans le textarea, il n'est pas d'afficher les informations pertinentes à partir de cet enregistrement pour la Maquette de l'Id, mais juste le texte.
Quelqu'un pourrait-veuillez en informer ?
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);
Vous devez vous connecter pour publier un commentaire.
L' ? est la liaison de la variable d'espace réservé. vous avez seulement 1. alors, pourquoi êtes-vous essayer de lier les 4 choses?
C'est le problème. Dans votre chaîne sql vous fait de la place pour 1 argument (indiqué par la
?
) mais alors vous avez essayé de définir 4. Donc, vous êtes allé de hors limites. Aussi depuis que vous avez codé en dur le MockID, l'Objet, l'Année, et la Date dans l'énoncé il n'y a pas de raison d'utilisersetString
pour essayer de les définir (à tort).Pour afficher la réponse dans votre ce faire:
String sql = "SELECT MockID, Subject, Year, Date FROM mockexam WHERE MockID =?"; PreparedStatement prest = con.prepareStatement(sql); prest.setString(1, "1");
sélectionnera lesCOLUMNS
MockID, l'Objet, l'Exercice et la Date à partir de la base de données pour une entrée avec uneMockID=1
Votre
PreparedStatement
a qu'une seule variable..j'.eMockID
SÉLECTIONNEZ MockID, Sujet, Année, Date à PARTIR de mockexam OÙ MockID =?....donc, après les déclarations
ne sont pas nécessaires.
Update for your comments
:nous ne
setString
pour toutes les variables qui sont représentés par des "?"....et ici seulement MockId est une variable.....vous pouvez récupérer l'ensemble de la ligne si vous voulez en utilisant la fonction "select *"...mais toujours il n'y aura qu'un seul argument(représenté par ?) pourPreparedStatement
et c'est votreMockId
."Date" n'est pas un bon choix pour un nom de colonne. C'est un mot réservé dans chaque base de données que je connais. Ce n'est pas très instructif pour les utilisateurs, que ce soit. Date de naissance? Date de la mort? Date de commande? Ça veut dire quoi?
Je commencerais par changer de "EXAM_DATE" ou quelque chose d'autre et de voir si cela aide.
Lors de la préparation de cette déclaration, vous "dire" que vous allez donner une valeur pour chaque
?
.Ici, vous avez seulement un, mais vous définir 4 d'entre eux plus tard :
Et n'oubliez pas de fermer votre connexion, l'état et le résultat possible de définir pour éviter les fuites de mémoire.