update-Anweisung in Java
Ich habe den folgenden code, um einen Datensatz zu aktualisieren. Der code wird kompiliert aber es springt alles in die try-Anweisung und zeigt die Fehlermeldung in der catch-Anweisung. Ich bin nicht sicher, was es ist, dass ich bin fehlt es nicht angezeigt wird jede Art von syntax-Fehler.
try {
PreparedStatement st = db.con.prepareStatement("UPDATE item SET Name = ?, Size = ?, Price = ?, WHERE ItemCode = ?");
st.setString(1, textArea_Code.getText());
st.setString(2, textArea_name.getText());
st.setString(3, textArea_size.getText());
st.setString(4, textArea_price.getText());
st.executeUpdate();
JOptionPane.showMessageDialog(frame, "Updated");
} catch (SQLException e ) {
JOptionPane.showMessageDialog(frame, "update not successful");
}
InformationsquelleAutor FatmaTurk | 2012-03-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist schlucken Sie die Ausnahme, die in der Regel eine schlechte Idee. Zumindest nennen
e.printStackTrace()
so, dass Sie eine Ausgabe von der Ausnahme.Wie es geschieht, haben Sie einen Syntaxfehler in SQL-Anweisung:
UPDATE item SET Name = ?, Size = ?, Price = ?, WHERE ItemCode = ?
- entfernen Sie das Komma aus nachPrice = ?
.Adresse der Verwirrung darüber, warum die UPDATE-Anweisung immer noch nicht funktioniert, trotz Fixierung der syntax-Fehler, die mir erlauben, um im detail zu erklären (weit einfacher, dies zu tun in der Antwort, anstatt in den Kommentaren).
Den
?
Zeichen in Ihren SQL-String ist ein Platzhalter für einen Wert, Sie werden mit einer der verschiedenenset_()
Methoden (in deinem Fall, immer nursetString()
. Jeder Platzhalter ist numeriert und mit einem index ab 1 - der erste?
wird in der Zeichenfolge stellt den index 1, die zweite repräsentiert den index 2 usw.Ihre SQL-string sieht wie folgt aus:
Sie beim festlegen der Werte für die Platzhalter so:
Sie haben vier Platzhalter in der SQL-Zeichenfolge, die von 1 bis 4 nummeriert. 1 ist der Wert für
Name
2 ist der Wert fürSize
3 ist der Wert fürPrice
und 4 ist der Wert fürItemCode
. Schauen Sie sich jetzt die Werte, die Sie übergeben haben, die in Ihremst.setString()
Anrufe.Sie können die Anzahl der tatsächlichen Zeilen aktualisiert, wie dies
int updated=st.executeUpdate();
Prüfen, zählen und sehen, ob etwas tatsächlich aktualisiert. Wenn es gibt >0, dann prüfen Sie, welche Datenbank Sie verwenden, ob die automatische commit-Modus ist oder nicht etc.executeUpdate liefert ein int. Sie müssen prüfen, diesen Wert zu bestimmen, wenn etwas aktualisiert wurde. Wenn Sie sehen, eine null, ich würde die Datenbank zu prüfen.
wenn das Problem war mit der Datenbank, dann nehme ich an, es nicht erlauben würde, mich zum löschen eines Datensatzes aus der Datenbank, richtig?
InformationsquelleAutor Anthony Grist
Haben Sie versucht, dies zu ändern-UPDATE-Anweisung so etwas wie dieses:
Nahm ich die Letzte
,
(Komma) nach derPrice = ?
weil es in Konflikt mit dem rest der SQL.Edit:
Außerdem können Sie neu anordnen möchten die
textArea_Code.getText()
Zeile der Letzte Wert für die vorbereitete Anweisung. Sonst, die ItemCode Wert möglicherweise nicht überein mit der Reihenfolge der?
Platzhalter (als der moment, es sieht aus wietextArea_price.getText()
ist gewöhnungsbedürftig, da der Wert fürItemCode
... die möglicherweise gefährlich sein für das, was aktualisiert wird!)Statt, was über so etwas wie dieses:
Auf diese Weise, alle die
?
Platzhalter korrekt übereinstimmen mit den Werten, eingestellt:Dies ist, weil die Parameter müssen in der gleichen Reihenfolge wie die Platzhalter (siehe diese Dokumentation für weitere Informationen.)
Ich aktualisiert diese Antwort; möchten Sie vielleicht, um zu versuchen, die Neuordnung der Reihenfolge der Platzhalter-Zeichenfolgen. Bitte siehe die Antwort für weitere details.
es funktioniert jetzt 🙂 jetzt kann ich sehen, wie die Bestellung kann auch einen Unterschied machen..vielen Dank..
Kein problem; und... herzlich willkommen auf Stack Overflow! Wie Sie Fragen stellen, vergessen Sie nicht, lassen Sie die community wissen, ob eine Antwort hilft Ihnen, indem entweder upvoting eine Antwort, oder Annahme die Antwort! Danke~
InformationsquelleAutor summea
Was ist die Ausgabe von executeUpdate? Hat es wieder jede beliebige Anzahl von Zeilen aktualisiert? Wenn nicht, dann ist offensichtlich die update-Klausel werden muss, sowie, aktualisiert!
Wenn die executeUpdate zurückgegeben, eine positive Zahl, die angibt, dass es aktualisiert wird, die Anzahl von Zeilen, können Sie Ihre commit-Richtlinie nicht die Einstellung auto übernehmen. In diesem Fall möchten Sie vielleicht zu Begehen, nachdem executeUpdate.
InformationsquelleAutor JUG
UPDATE Artikel SET Name = ?, Größe = ?, Preis = ? WO ItemCode = ?
InformationsquelleAutor Hugues
Nachdem DB Anschluss-set auto commit true, so dass die DB wird aktualisiert, ohne Fehler.
InformationsquelleAutor user1907542