Java.sql.SQLException: Nom de colonne non valide, WHY? [Résolu/Fermé]

Signaler
-
Messages postés
9
Date d'inscription
mercredi 26 février 2014
Statut
Membre
Dernière intervention
29 mai 2014
-
Bonjour,

J'utilise hibernate 3 avec Spring 2.5, en essayant de lancer une requette sur une vue matérialisé je recois l'exeption ci-dessous.

Merci de m'aider.

Voici ma requette:


String sql =
"SELECT * FROM ADM_RATING.WEBCARE_TABLE WHERE CUSTOMER_ID in ("
+ "select customer_id from adm_mv.mv_customer_all "
+ "connect by prior customer_id = customer_id_high and paymntresp is null "
+ "start with customer_id = ? and paymntresp = 'X') order by CO_ID";

Collection<BscsConsumption> result =
this.jdbcTemplate.query( sql, new Object[] { new Long( coId ) }, new RowMapper()
{
public Object mapRow( ResultSet rs, int rowNum )
throws SQLException
{
return getConsumption( rs );
}
} );
return result;


Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT R.* FROM ADM_VALOTR.VIEW_RATEPLANS R WHERE CUSTOMER_ID IN (select customer_id from adm_mv.mv_customer_all connect by prior customer_id = customer_id_high and paymntresp is null start with customer_id = ? and paymntresp = 'X')]; nested exception is java.sql.SQLException: Nom de colonne non valide
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:276)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:607)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:641)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:670)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:678)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:710)
at com.orangecaraibe.vtr.dao.impl.BscsDaoImpl.getContractsOfPayer(BscsDaoImpl.java:523)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198)
at $Proxy97.getContractsOfPayer(Unknown Source)
at com.orangecaraibe.vtr.service.impl.ManageInstalledNetworkProductConsumptionImpl.findAndGet(ManageInstalledNetworkProductConsumptionImpl.java:149)
at com.orangecaraibe.vtr.soa.provider.ManageInstalledNetworkProductConsumptionProvider.findAndGet(ManageInstalledNetworkProductConsumptionProvider.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:77)
at com.orangecaraibe.enabler.Enabler.logMethod(Enabler.java:198)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:627)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:616)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:64)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:160)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy93.findAndGet(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
... 45 more
Caused by: java.sql.SQLException: Nom de colonne non valide
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3319)
at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:1926)
at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1515)
at com.orangecaraibe.vtr.dao.impl.BscsDaoImpl.getContract(BscsDaoImpl.java:498)
at com.orangecaraibe.vtr.dao.impl.BscsDaoImpl.access$200(BscsDaoImpl.java:38)
at com.orangecaraibe.vtr.dao.impl.BscsDaoImpl$9.mapRow(BscsDaoImpl.java:529)
at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:92)
at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:653)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:591)

4 réponses

Messages postés
814
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
17 avril 2020
115
Bonjour,


Vérifiez votre requête, sinon mettez le schéma de la base des données (les requêtes "Create Table"). L'erreur provient de la partie jdbc alors ça ne doit pas avoir lien avec spring et hibernate, il faut descendre versle schéma de la base des données.

Bon Courage.
Messages postés
9
Date d'inscription
mercredi 26 février 2014
Statut
Membre
Dernière intervention
29 mai 2014

Bonjour, merci pour ta réponse Tarek. En fait je ne pense pas que ca provient de la base car je descend bien au niveau des schémas ADM_RATING et ADM_MV au niveau de ma requete et la même requete fonctionne parfaitement quand je la lance depuis SQL.
Je pense que c'est le mapping avec l'objet BSCSDao, mais je n'arrive pas à identifier ou?
Messages postés
9
Date d'inscription
mercredi 26 février 2014
Statut
Membre
Dernière intervention
29 mai 2014

En fait j'ai en partie trouvé la provenance du problème. Quand j'ai changé l'ordre de recupération du resultset dans getContract afin que ca soit au meme ordre des colomns dans la vue VIEW_RATEPLANS, j'obtiens une exception differente.

10:28:43,708 DEBUG org.springframework.jdbc.core.JdbcTemplate(574) - execute - Executing prepared SQL statement [SELECT * FROM ADM_VALOTR.VIEW_RATEPLANS WHERE CO_ID = ?]
10:28:43,718 DEBUG org.springframework.jdbc.datasource.DataSourceUtils(112) - doGetConnection - Fetching JDBC Connection from DataSource
10:28:43,858 DEBUG org.springframework.jdbc.core.StatementCreatorUtils(205) - setParameterValueInternal - Setting SQL statement parameter value: column index 1, parameter value [2200197], value class [java.lang.Long], SQL type unknown
10:28:44,088 DEBUG org.springframework.jdbc.datasource.DataSourceUtils(312) - doReleaseConnection - Returning JDBC Connection to DataSource
10:28:44,098 ERROR com.orangecaraibe.enabler.Enabler(204) - logMethod - Interceptor caught error:
java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.orangecaraibe.vtr.dao.BscsContract
at com.orangecaraibe.vtr.dao.impl.BscsDaoImpl.getContract(BscsDaoImpl.java:290)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198)
at $Proxy163.getContract(Unknown Source)
Messages postés
814
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
17 avril 2020
115
"Interceptor caught error:
java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.orangecaraibe.vtr.dao.BscsContract"

Cette erreur apparît lorsqu'on veut faire une affectation mais les types (les classes) sont incompatibles


Une Classe objet = new UneClasse();
UneAutreClasse deuxiemeObjet = objet;

Affiche la pile complète des messages d'erreur, vous allez arriver à la ligne exacte qui provoque le problème.
Messages postés
9
Date d'inscription
mercredi 26 février 2014
Statut
Membre
Dernière intervention
29 mai 2014

En effet merci Tarek tu avais raison j'affectais à un objet BscsContrat un Arraylist en modifiant le BscsContrat à un type collection bscsContrat ca a marché