springframework.jdbc.UncategorizedSQLException :Invalid type de colonne-
Salut suis en train de faire un QueryForInt à l'aide de printemps jbdc.La requête retourne un simple comptage.Lors de l'exécution j'obtiens springframework.jdbc.UncategorizedSQLException:java.sql.SQLException: Invalid type de colonne.
Je n'ai trouver des postes similaires et essayé les suggestions, mais je suis toujours bloqué:(...
Toute aide est appréciée.
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue(DAOConstants.PROD_ID, custVo.getProdId(),OracleTypes.NUMBER);
params.addValue(DAOConstants.REQ_IND, DAOConstants.FLAG_Y,OracleTypes.VARCHAR);
La requête:
select count(1) from prod where prod_id = :PROD_ID and req_ind =:REQ_IND
Définition de la Table
Name Null Type
----------------- -------- ------------
PROD_ID NOT NULL NUMBER(5)
REQ_IND VARCHAR2(10)
Les Journaux..
Caused by: org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback;
uncategorized SQLException for SQL [select count(1) from prod where prod_id = :PROD_ID and req_ind = :REQ_IND ]; SQL state [99999]; error code [17004]; Invalid column type; nested exception is java.sql.SQLException: Invalid column type
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:602)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:673)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:728)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:744)
at org.springframework.jdbc.core.JdbcTemplate.queryForInt(JdbcTemplate.java:775)
... 45 more
Caused by: java.sql.SQLException: Invalid column type
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:263)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:271)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:445)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:7937)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:7517)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:8174)
at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:8155)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:230)
at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.setObject(WrappedPreparedStatement.java:724)
at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:351)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:216)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:144)
at org.springframework.jdbc.core.ArgPreparedStatementSetter.doSetValue(ArgPreparedStatementSetter.java:65)
at org.springframework.jdbc.core.ArgPreparedStatementSetter.setValues(ArgPreparedStatementSetter.java:46)
at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:641)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:586)
... 56 more
- Quels sont les types d'arguments que vous mettez en MapSqlParameterSource?
- merci pour la réponse, j'ai testé avec un argument à un moment et a constaté que l'exception se produit pour l'argument ":PROD_ID". Dans MapSqlParameterSource je suis insertion de type int pour :PROD_ID..cudnt figure la cause.
- Peut-être que l'int est trop grand pour la base de données à manipuler. J'ai vu qu'il est de type NUMBER(5), ce qui signifie qu'il ne peut contenir que 5 chiffres
- Le problème est que j'ai oublié d'utiliser namedjdbctemplate et utilisé simplejdbc à la place.Il est résolu.
- C'est bon à entendre!
- Merci!! Acclamations...
Vous devez vous connecter pour publier un commentaire.
Basé sur la stacktrace on dirait que vous êtes à l'aide de la JdbcTemplate classe. Puisque vous utilisez le paramètre nommé style détenteurs de place et de fournir un MapSqlParameterSource pour les paramètres que vous devez utiliser le NamedParameterJdbcTemplate.
Alors, pourquoi êtes-vous de cet étrange message d'erreur? Eh bien, votre requête SQL en fait, il fonctionne à l'aide de l'Oracle JDBC driver. Il vous autorise à utiliser "?" ou un paramètre nommé style à l'aide d'un ":" comme préfixe bof les espaces réservés. Vous avez encore besoin de fournir les valeurs des paramètres dans le bon de commande que le MapSqlParameterSource dans votre cas, ne l'est pas. Vous pouvez tester cela en utilisant un tableau d'Objets comme:
L'erreur est fondée sur les valeurs de venir dans le mauvais ordre de la params.méthode getValues (), avec la valeur de la Chaîne est passée pour l' :PROD_ID.