Java exception et champs NULL DB

Résolu
Bonjour,

Comment faire pour éviter : java.lang.NullPointerException lors de l'affichage d'un table sql possédant des champs Null ?

Cdt

6 réponses

  1. Modérateur
    Dans ResulSetMetaData, il existe ceci

    isNullable
    int isNullable(int column)
    throws SQLExceptionIndicates the nullability of values in the designated column.

    Parameters:
    column - the first column is 1, the second is 2, ...
    Returns:
    the nullability status of the given column; one of columnNoNulls, columnNullable or columnNullableUnknown
    Throws:
    SQLException - if a database access error occurs

    Tu peux peut-être faire le test la dessus
    1
    1. Modérateur
      Salut

      Difficile à dire comme ça...

      0
      1. Le code java d'exécution et d'affichage d'une requête sql :

        //-----Requete sql-----
        			//Création d'un objet Statement
        			Statement state = conn.createStatement();
        			//L'objet ResultSet contient le résultat de la requête SQL
        			ResultSet result = state.executeQuery("SELECT * FROM bob");
        		
        			//On récupère les MetaData
        			ResultSetMetaData resultMeta = result.getMetaData();
        			
        			System.out.println("\n**********************************");
        			//On affiche le nom des colonnes
        			for(int i = 1; i <=  resultMeta.getColumnCount(); i++)
        				System.out.print("\t" + resultMeta.getColumnName(i).toUpperCase() + "\t *");
        				System.out.println("\n**********************************");
        			
        			while(result.next()){			
        				for(int i = 1; i <=  resultMeta.getColumnCount(); i++)
        					System.out.print("\t" + result.getObject(i).toString() + "\t |");
        				System.out.println("\n---------------------------------");
        			}
                    result.close();
                    state.close();


        La table BOB :
        possède des champs genre "id" "name" "url" et parfois la donnée de "url" est à "null". Et la paf ca fait des choca... exceptions!
        0
      2. Modérateur
        tu peux inclure dans ta boucle une condition avant de traiter ton résultat ?
        0
      3. C'est fait en dessous, mais je ne vois pas comment mettre une condition sur un résultat avant de le "traiter"...
        0
    2. J'ai testé ca mais ca ne marche toujours pas :

      while(result.next()){    
          for(int i = 1; i <=  resultMeta.getColumnCount(); i++){ 
           if (result.getObject(i).toString()== "null"){ // " " "" "NULL" 
            System.out.println("\t NULL \t |"); 
           } 
           else{ 
           System.out.print("\t" + result.getObject(i).toString() + "\t |"); 
           } 
          } 
          System.out.println("\n---------------------------------"); 
         }
      0
      1. Modérateur
        une petite question ...

        je vois que tu fais ceci

        result.getObject(i)

        Cette méthode te renvoie un objet...

        tu a essayé de faire

        result.getString(i) ?????

        0
        1. Ca provient d'un tuto du site du zero, d'apres ce que j'ai compris, ca permet d'éviter les problèmes de typages. (Je vais essayer le isnullable)
          0
      2. Je ne vois pas comment utiliser isnullable.............

        je fais un
        if (ResultSetMetaData isnullable){ 
              System.out.println("\t NULL \t |"); 
             } 
             else{ 
              System.out.print("\t" + result.getObject(i).toString() + "\t |"); 
             }


        Mais bien entendu ca ne fonctionne pas :(
        0
        1. Modérateur
          tu ne sais pas faire un test sur isNullable, celà te renvoie un "int" qui te donne un des trois valeurs statiques( columnNoNulls, columnNullable or columnNullableUnknown)
          ...
          De plus, tu dois indiquer le numéro de la colonne.

          Donc

          if (resultMeta.isNullable(i) == ResultMetaData.columnNullable){
          System.out.println("\t NULL \t |");
          }
          else{
          System.out.print("\t" + result.getObject(i).toString() + "\t |");
          }
          0
        2. Contributeur
          Il faut lire les Javadoc de temps en temps ;-)
          0
      3. Merci ca fonctionne.
        0
        1. Modérateur
          cool
          0