Java exception et champs NULL DB

Résolu
fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   -  
choubaka Messages postés 5534 Date d'inscription   Statut Modérateur Dernière intervention   -
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. choubaka Messages postés 5534 Date d'inscription   Statut Modérateur Dernière intervention   2 113
     
    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
  2. choubaka Messages postés 5534 Date d'inscription   Statut Modérateur Dernière intervention   2 113
     
    Salut

    Difficile à dire comme ça...

    0
    1. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
       
      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. choubaka Messages postés 5534 Date d'inscription   Statut Modérateur Dernière intervention   2 113
       
      tu peux inclure dans ta boucle une condition avant de traiter ton résultat ?
      0
    3. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
       
      C'est fait en dessous, mais je ne vois pas comment mettre une condition sur un résultat avant de le "traiter"...
      0
  3. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
     
    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
  4. choubaka Messages postés 5534 Date d'inscription   Statut Modérateur Dernière intervention   2 113
     
    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. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
     
    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. choubaka Messages postés 5534 Date d'inscription   Statut Modérateur Dernière intervention   2 113
       
      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. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
       
      Il faut lire les Javadoc de temps en temps ;-)
      0
  7. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
     
    Merci ca fonctionne.
    0
    1. choubaka Messages postés 5534 Date d'inscription   Statut Modérateur Dernière intervention   2 113
       
      cool
      0