Java exception et champs NULL DB

Résolu/Fermé
fxtaa Messages postés 1050 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 2 avril 2015 - 7 sept. 2010 à 11:29
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 - 7 sept. 2010 à 19:45
Bonjour,

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

Cdt
A voir également:

6 réponses

choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
7 sept. 2010 à 13:22
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
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
7 sept. 2010 à 11:32
Salut

Difficile à dire comme ça...

0
fxtaa Messages postés 1050 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 2 avril 2015 74
7 sept. 2010 à 11:44
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
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
7 sept. 2010 à 11:48
tu peux inclure dans ta boucle une condition avant de traiter ton résultat ?
0
fxtaa Messages postés 1050 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 2 avril 2015 74
7 sept. 2010 à 13:04
C'est fait en dessous, mais je ne vois pas comment mettre une condition sur un résultat avant de le "traiter"...
0
fxtaa Messages postés 1050 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 2 avril 2015 74
Modifié par fxtaa le 7/09/2010 à 12:03
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
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
7 sept. 2010 à 13:25
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
fxtaa Messages postés 1050 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 2 avril 2015 74
7 sept. 2010 à 13:36
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fxtaa Messages postés 1050 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 2 avril 2015 74
Modifié par fxtaa le 7/09/2010 à 13:46
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
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
7 sept. 2010 à 14:01
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
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
7 sept. 2010 à 14:16
Il faut lire les Javadoc de temps en temps ;-)
0
fxtaa Messages postés 1050 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 2 avril 2015 74
7 sept. 2010 à 16:23
Merci ca fonctionne.
0
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
7 sept. 2010 à 19:45
cool
0