SQLException: Kein Wert für Parameter 1 angegeben

8

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:

%Vor%

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%     
ShaunK 18.11.2011, 13:06
quelle

3 Antworten

13

Es gibt keine Methode wie Connection() und getPreparedStatement() auf java.sql.Connection .

%Vor%

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%

Siehe auch:

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.

Siehe auch:

BalusC 18.11.2011, 13:41
quelle
2

Wenn Sie

verwenden %Vor%

Sie müssen

%Vor%

vor

%Vor%

Um dem ersten Parameter einen Wert zuzuweisen (d. h. Parameter 1). Wenn nicht, wird Ihre Ausnahme auftreten.

    
oers 18.11.2011 13:34
quelle
2

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%     
Raidok 18.11.2011 13:21
quelle

Tags und Links