Beim Ausführen meiner Anwendung ist folgender Fehler aufgetreten:
java.sql.SQLException: Kein Wert für Parameter 1 angegeben
Was heißt das?
Meine UserGroup
Liste in meinem Dao:
Meine Liste der Benutzergruppen in meiner verwalteten Bean:
%Vor%Meine JSF-Seite:
%Vor%Meine Datentabelle kann die Liste der Gruppen aus der Datenbank anzeigen. Wenn ich jedoch eine einzelne Zeile in meiner Datentabelle auswähle, dauert es einige Zeit, bis die Anwendung eine Verbindung mit meiner Datenbank herstellt, um das ausgewählte Ergebnis anzuzeigen.
Außerdem ist es seltsam, dass die Anwendung bestimmte ausgewählte Ergebnisse schneller als andere anzeigen kann. Hat es etwas mit der Ausnahme zu tun, auf die ich am Anfang hingewiesen habe?
Fehler:
%Vor% Es gibt keine Methode wie Connection()
und getPreparedStatement()
auf java.sql.Connection
.
Das conn
ist eindeutig ein selbstgewebter Wrapper für JDBC-Code. Ihr spezielles Problem wird wahrscheinlich durch den Code hinter der Methode getPreparedStatement()
verursacht. Offenbar fügt sie ?
an die SQL-Zeichenfolge an, bevor sie an die echte connection.prepareStatement()
Methode.
Sie möchten das wahrscheinlich nicht hören, aber Ihr JDBC-Ansatz ist völlig kaputt. Dieses Design zeigt an, dass die JDBC Connection
als statische oder Instanzvariable gehalten wird, die threadunsicher ist.
Sie müssen es komplett neu schreiben, so dass es sich auf die folgende korrekte Verwendung und das variable Scoping reduziert:
%Vor%Unrelated auf die konkrete Frage, Sie haben ein anderes Problem. Die folgende Ausnahme
javax.el.ELException: /index.xhtml @ 61,99 value="# {usuariousGruposBean.listOfUserGroups}": Fehler beim Lesen von 'listOfUserGroups' am Typ br.view.UsuariousGruposBean
zeigt an, dass Sie den JDBC-Code in einer Getter -Methode und nicht in einem (Post-) Konstruktor oder einer (Aktions-) Listener-Methode ausführen. Dies ist auch eine sehr schlechte Idee, da ein Getter während der Renderantwort mehr als einmal aufgerufen werden kann. Fix es entsprechend.
Normalerweise erhalten Sie diese Art von Fehlern, wenn Sie vorbereitete Anweisungen verwenden und vergessen haben, den Parameter mit dem Index 1 zu setzen.
In diesem Fall verwenden Sie vorbereitete Anweisungen, aber Sie müssen nichts vorbereiten. Sie müssen die Abfragezeichenfolge von Hand eingeben.
Außerdem können zusätzliche Probleme auftreten, weil Sie ein Integer
zwischen aposthrophes verketten. Numerische Werte gehen ohne sie aus.
Also sollte es so sein:
%Vor% Aber eigentlich sollten Sie etwas wie getStatement () verwenden oder getPreparedStatement () korrekt verwenden (platzieren Sie ein? an der Position von var
und setInteger (), um es einzufügen.)
Die endgültige Lösung wäre also:
%Vor%