SQLException: Pas de valeur spécifiée pour le paramètre 1
J'ai rencontré l'erreur suivante quand j'étais de l'exécution de ma demande:
java.sql.SQLException: Pas de valeur spécifiée pour le paramètre 1
Ça veut dire quoi?
Mon UserGroup
liste dans mon dao:
public List<UsuariousGrupos> select(Integer var) {
List<UsuariousGrupos> ug= null;
try {
conn.Connection();
stmt = conn.getPreparedStatement("select id_usuario, id_grupo from usuarios_grupos where id_grupo ='" + var + "'");
ResultSet rs = stmt.executeQuery();
ug = new ArrayList<UsuariousGrupos>();
while (rs.next()) {
ug.add(getUserGrupos(rs));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
conn.Disconnected();
}
return ug;
}
public UsuariousGrupos getUserGrupos(ResultSet rs) {
try {
UsuariousGrupos ug = new UsuariousGrupos(rs.getInt("id_usuario"), rs.getInt("id_grupo"));
return ug;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
Mon obtenir la liste des groupes d'Utilisateurs dans mon managed bean:
public List<UsuariousGrupos> getListOfUserGroups() {
List<UsuariousGrupos> usuariosGruposList = userGrpDAO.select(var2);
listOfUserGroups = usuariosGruposList;
return listOfUserGroups;
}
Mon JSF page:
<p:dataTable var="usergroups" value="#{usuariousGruposBean.listOfUserGroups}">
<p:column headerText="" style="height: 0" rendered="false">
<h:outputText value="#{usergroups.id_grupo}"/>
</p:column>
Ma table de données est capable d'afficher la liste des groupes de la base de données. Cependant, lorsque je sélectionne une ligne individuelle au sein de mon tableau de données, il faut un certain temps pour que la demande d'établissement de connexion avec ma base de données pour afficher le résultat sélectionné.
Aussi, c'est bizarre que l'application est capable d'afficher certains des résultats plus rapidement que les autres. A-t-elle quelque chose à voir avec l'Exception que j'ai souligné au début?
Erreur:
Disconnected
Connected!!
java.sql.SQLException: No value specified for parameter 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2560)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2536)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2462)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2216)
at br.dao.UsuariousGruposDAO.select(UsuariousGruposDAO.java:126)
at br.view.UsuariousGruposBean.getListOfUserGroups(UsuariousGruposBean.java:54)
SEVERE: Error Rendering View[/index.xhtml]
javax.el.ELException: /index.xhtml @61,99 value="#{usuariousGruposBean.listOfUserGroups}": Error reading 'listOfUserGroups' on type br.view.UsuariousGruposBean
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
l'erreur se produit lors de ces deux lignes: ResultSet rs = stmt.executeQuery(); List<UsuariousGrupos> usuariosGruposList = userGrpDAO.sélectionnez(var2);
êtes-vous sûr que vous sélectionnez n'est pas "sélectionnez id_usuario, id_grupo de usuarios_grupos où id_grupo = ?". Cela expliquerait le manque de valeur pour le paramètre 1.
humm j'ai effectivement essayé, et j'obtiens l'erreur suivante.
la nouvelle erreur semble être un nouveau problème. Peut-être que vous devriez ouvrir une nouvelle question et accepter une solution pour le sql exception ici.
OriginalL'auteur ShaunK | 2011-11-18
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas une telle méthode comme
Connection()
etgetPreparedStatement()
surjava.sql.Connexion
.La
conn
est clairement un domaine wrapper autour de code JDBC. Votre problème est probablement provoqué par le code derrière legetPreparedStatement()
méthode. Il semblerait que ce soit l'ajout d'un?
de la chaîne SQL avant de déléguer à travers le réelconnexion.prepareStatement()
méthode.Vous probablement ne voulez pas entendre cela, mais votre JDBC approche est totalement rompu. Cette conception indique que le JDBC
Connection
est en statique ou variable d'instance qui est threadunsafe.Vous devez totalement réécrire, de sorte qu'il se résume à la suite d'une utilisation correcte et variable de portée:
Voir aussi:
Sans rapport avec à la question concrète, vous avez un autre problème. L'exception suivante
indique que vous êtes en train de faire le JDBC trucs à l'intérieur d'un getter méthode au lieu de (post), le constructeur ou l' (action)méthode d'écouteur. C'est aussi une très mauvaise idée, car un getter peut être appelé plus d'une fois pendant le rendu de la réponse. Corrigé en conséquence.
Voir aussi:
+1 pour les taches il n'était pas réellement JDBC mais un wrapper
OriginalL'auteur BalusC
En général, vous obtenez ce genre d'erreur lors de l'utilisation de déclarations préparées à l'avance et j'ai oublié de mettre le paramètre à l'index 1.
Dans ce cas, vous êtes à l'aide de déclarations préparées à l'avance mais il n'y a rien à préparer, vous faites de la chaîne de requête à la main.
Aussi, vous risquez de rencontrer des problèmes supplémentaires parce que vous êtes la concaténation d'un
Integer
entre aposthrophes. Les valeurs numériques aller sans eux.Donc, il devrait ressembler à ceci:
Mais en réalité, vous devriez utiliser quelque chose comme getStatement() ou utilisez le getPreparedStatement() correctement (au lieu d'un ? à la position de
var
et setInteger() à la place.Donc la dernière solution serait:
Il n'a pas de mal à créer une instruction préparée sans espaces réservés.
OriginalL'auteur Raidok
Si vous utilisez
Vous avez à
avant
Pour affecter une valeur du premier paramètre (i.e. le Paramètre 1). Si ce ne sont vos exception se produit.
GRAVE: Erreur de Rendu de la Vue[/index.xhtml] javax.el.ELException: /index.xhtml @61,99 value="#{usuariousGruposBean.listOfUserGroups}": Erreur de lecture "listOfUserGroups" sur le type br.vue.UsuariousGruposBean au com.soleil.des visages.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114) at javax.des visages.composante.ComponentStateHelper.eval(ComponentStateHelper.java:194) at javax.des visages.composante.ComponentStateHelper.eval(ComponentStateHelper.java:182)
bien var2 est mon id sélectionnées lorsque je sélectionne la ligne. Je suis en train de passer dans mon select (Int var) méthode dans le dao.
OriginalL'auteur oers