IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

requête Oracle sur type NUMBER


Sujet :

JDBC Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Points : 39
    Points
    39
    Par défaut requête Oracle sur type NUMBER
    Bonjour à tous

    je travaille depuis peu sur un projet Java qui requête une base Oracle, et je rencontre un problème que j'ai du mal à résoudre :

    J'essaye de faire une requête simple dans une base de données :
    SELECT DONNEE_A FROM TABLE_T WHERE DONNEE_B = 'valeur'

    DONNEE_A est de type NUMBER
    DONNEE_B de type NVARCHAR2(80 CHAR)

    Lorsque j'exécute mon statement j'ai l'erreur (je ne mets que le début) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    java.lang.NumberFormatException at java.math.BigDecimal.
    (BigDecimal.java:398) at java.math.BigDecimal.(BigDecimal.java:671) at 
    com.ibm.db.base.DatabaseStringField.setFieldObject
    (DatabaseStringField.java) at com.ibm.db.base.DatabaseTypeField.setObject
    (DatabaseTypeField.java) at 
    com.ibm.db.base.DatabaseResultTable.setInputValues
    (DatabaseResultTable.java) at com.ibm.db.base.DatabaseResultTable.execute
    (DatabaseResultTable.java) at com.ibm.db.SelectStatement.createResultTable
    (SelectStatement.java) at com.ibm.db.SelectStatement.execute
    (SelectStatement.java)
    J'ai l'impression que le problème vient du type NUMBER, je ne sais pas si il correspond à Integer en java, ou bien à BigDecimal, j'ai essayé plusieurs choses et je n'arrive pas à récupérer cette donnée.

    (en réalité la donnée_A est un simple chiffre, qui rentrerait même dans un short en java ...)

    Quelqu'un a-t-il une idée sur l'origine de l'erreur ? Un mini exemple sur la récupération en Java d'un champ Oracle de type NUMBER serait aussi le bienvenu.
    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Peux tu envoyer le bout de code qui exécute ta requête s'il te plait

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Points : 39
    Points
    39
    Par défaut
    alors en fait l'erreur a changé car j'ai un peu avancé. J'essaie d'insérer un double dans un champ de type NUMBER(16,2) et j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    com.ibm.db.DataException: Une erreur de gestionnaire de base de 
    données s'est produite. : ORA-01722: Nombre non valide at 
    com.ibm.db.SQLStatement.execute(SQLStatement.java)  ...
    La requête ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO GDA_POSITIONS_LIMITES 
    (ID_GDA_POSITIONS_LIMITES, ID_DA, RAF_GROUPE, GROUPE_PROD, 
    CONTRAT_COMPTE, DEVISE, LIMITE, EN_COURS, RISQUE, UFO, DEP)  VALUES 
    (?,?,?,?,?,?,?,?,?,?,?)
    en remplaçant les ? par des valeurs.

    J'essaie d'insérer la valeur Double "50.0" dans le NUMBER(16,2) (colonne EN_COURS)

    Extraits de code :

    (j'appelle InsertionPositionsLimitesBean.execute(); )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    public class InsertionPositionsLimitesBean extends InsertDataBean {
     
    	protected int id_gda_positions_limites;
    	protected String id_da;
    	protected String raf_groupe;
    	protected String groupe_prod;
    	protected String contrat_compte;
    	protected String devise;
    	protected double limite;
    	protected double en_cours;
    	protected String risque;
    	protected String ufo;
    	protected String dep;
     
    	protected void initializeMetaData(StatementMetaData aMetaData) throws DataException {
    		// requête SQL
    		aMetaData.setSQL(getSQLString());
    		// on ajoute la table sur laquelle on va faire la requête au metadata
    		aMetaData.addTable(Constants.TABLE_GDA_POSITIONS_LIMITES);
     
    		// définir les emplacements des paramètres
    		aMetaData.addParameter("id_gda_positions_limites", Integer.class, 1);
    		aMetaData.addParameter("id_da", String.class, 1);
    		aMetaData.addParameter("raf_groupe", String.class, 1);
    		aMetaData.addParameter("groupe_prod", String.class, 1);
    		aMetaData.addParameter("contrat_compte", String.class, 1);
    		aMetaData.addParameter("devise", String.class, 1);
    		aMetaData.addParameter("limite", Double.class, 1);
    		aMetaData.addParameter("en_cours", Double.class, 1);
    		aMetaData.addParameter("risque", String.class, 1);
    		aMetaData.addParameter("ufo", String.class, 1);
    		aMetaData.addParameter("dep", String.class, 1);
    	}
     
    	public String getSQLString() {
    		String requete = "INSERT INTO GDA_POSITIONS_LIMITES (ID_GDA_POSITIONS_LIMITES, ID_DA, RAF_GROUPE, GROUPE_PROD, CONTRAT_COMPTE, DEVISE, LIMITE, EN_COURS, RISQUE, UFO, DEP) "
    						+ "VALUES (?,?,?,?,?,?,?,?,?,?,?) ";
    			return requete;
    	}
     
    	public void initializeParameters() throws DataException {
    		sqlStatement.setParameter("id_gda_positions_limites", new Integer (getId_gda_positions_limites()));
    		sqlStatement.setParameter("id_da", getId_da());
    		sqlStatement.setParameter("raf_groupe", getRaf_groupe());
    		sqlStatement.setParameter("groupe_prod", getGroupe_prod());
    		sqlStatement.setParameter("contrat_compte", getContrat_compte());
    		sqlStatement.setParameter("devise", getDevise());
    		sqlStatement.setParameter("limite", new Double (getLimite()));
    		sqlStatement.setParameter("en_cours", new Double (getEn_cours()));
    		sqlStatement.setParameter("risque", getRisque());
    		sqlStatement.setParameter("ufo", getUfo());
    		sqlStatement.setParameter("dep", getDep());
     
    	}
    La mère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    abstract public class InsertDataBean extends SQLDataBean {
     
    	public void execute() throws Exception, IOException, DataException {
     
    		initialize(); 
     
    		// Initialize the parameters for the query
    		this.initializeParameters();
     
    		java.util.Date date1 = new java.util.Date();
     
    		// Execute the SQL statement
    		sqlStatement.execute();
     
    		java.util.Date date2 = new java.util.Date();
     
    		if (ConfigLog.req.isEnabled(ILogPriority.DEBUG)) {
    			String classe = this.getClass().getName();
    			String methode = "execute()";
    			String sqlstatement = "Sql statement : " + getSQLString();
    			long tempsExec = date2.getTime() - date1.getTime();
     
    			int i=1;
    			int nbParam = sqlStatement.getMetaData().getParameterCount();
     
    			ConfigLog.req.logText (classe, methode, "Classe : " + classe,nbp.tec.log.ILogPriority.DEBUG);
    			ConfigLog.req.logText (classe, methode, "Methode : " +methode,nbp.tec.log.ILogPriority.DEBUG);
    			ConfigLog.req.logText (classe, methode, "temps d exec : " + tempsExec+"",nbp.tec.log.ILogPriority.DEBUG);
    			ConfigLog.req.logText (classe, methode, "SQL : " + sqlstatement,nbp.tec.log.ILogPriority.DEBUG);
    			String parametre=null;
    			while (i<nbParam+1) {
    				parametre = "Paramètres " + sqlStatement.getMetaData().getParameterName(i) + " : " + sqlStatement.getParameter(sqlStatement.getMetaData().getParameterName(i));
    				ConfigLog.req.logText (classe, methode, parametre,nbp.tec.log.ILogPriority.DEBUG);
    				i++;
    			}
    			ConfigLog.req.logText (classe, methode, "=============================================================",nbp.tec.log.ILogPriority.DEBUG);
     
    		}
    		nbAffectedRows = sqlStatement.getNumAffectedRows();
     
    	}
     
     
    	/**
             * Initialisation de la classe MetaData
             *
             * @param               StatementMetaData
             * @exception   com.ibm.db.DataException
             */
    	protected void initializeMetaData() throws DataException {
    		initializeMetaData(sqlStatement.getMetaData());
    	}
     
    	/**
             *      Cette classe instancie l'objet sqlstatement et l'initialise avec
             * le connection
             *
             *  Date de création : (02/08/2000 14:38:34)
             */
    	final public void initializeSqlStatement() {
    		sqlStatement = new SQLStatement();
    		sqlStatement.setConnection(getDatabaseConnection());
    	}

Discussions similaires

  1. [oracle 9i] to_char sur un number
    Par sygale dans le forum Oracle
    Réponses: 6
    Dernier message: 30/09/2010, 13h17
  2. Types Oracles sur 9iR2
    Par booth dans le forum Administration
    Réponses: 3
    Dernier message: 27/02/2007, 15h30
  3. Réponses: 4
    Dernier message: 14/06/2006, 11h07
  4. Variable Oracle de type number
    Par marti dans le forum Oracle
    Réponses: 1
    Dernier message: 16/08/2005, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo