2010-11-24 8 views
1

Je cours JConnector pour obtenir des données de la base de données (j'utilise mysql). J'ai vérifié mes données à partir d'une requête de Secure Shell, ça a bien fonctionné. Cependant, il a lancé NullPointerException lorsque j'ai exécuté mon programme, il a seulement lu la première ligne. Je viens d'apprendre Java pendant un mois, donc désolé si ma question vous semble étrange. Voici mon code:Quelles sont les exceptions possibles peuvent être levées lors de l'exécution de executeQuery()

private void loadNodesFromDatabase() 
    { 
     Statement stmt = Database.connect(); 
     String query = "SELECT * FROM Node"; 
     ResultSet res; 
     try 
     { 
      res = stmt.executeQuery(query); 
      while(res.next()) 
      { 
       Integer id = res.getInt("Id"); 
       String position = res.getString("Position"); 
       String rule = res.getString( "RuleOnMap"); 
       Integer foodTax = res.getInt( "FoodTax"); 
       boolean mapValue = res.getBoolean("MapValue"); 

       Node n = new Node(id, PointOnGraph.parse(position), Node.RuleOnMap.valueOf(rule), foodTax, mapValue); 
       System.out.println(n); 
       nodes.add(n); 
      } 
      res.close(); 
     } 
     catch(Exception e) 
     { 
      System.out.println("Selection Error: " + e); 
     } 
    } 

Ceci est la requête que j'ai créé ma table:

mysql> CREATE TABLE Node (Id INT(3), Position VARCHAR(12), RuleOnMap VARCHAR(6), FoodTax INT(2), MapValue TINYINT(1), PRIMARY KEY(Id)); 

Et voici le message d'erreur Eclipse:

(1, '20,20,88', PAY, 10, false) 
Selection Error: java.lang.NullPointerException 
... 

Merci,

Après avoir appelé e.printStackTrace();

(1, '20,20,88', PAY, 10, true) 
Selection Error: java.lang.NullPointerException 
java.lang.NullPointerException 
    at Game.Game.loadNodesFromDatabase(Game.java:177) 
    at Game.Game.<init>(Game.java:31) 
    at Test.GameLoadDatabseTest.loadNodesTest(GameLoadDatabseTest.java:30) 
    at Program.main(Program.java:39) 
Exception in thread "main" java.lang.NullPointerException 
    at Test.GameLoadDatabseTest.loadNodesTest(GameLoadDatabseTest.java:32) 
    at Program.main(Program.java:39) 

Meilleures salutations, Chan Nguyen

+0

Salut Chan, pouvez-vous nous dire à partir de quelle ligne l'exception est lancée? Il devrait dire dans le message (sinon poster les premières lignes de l'exception ici). En outre, l'exception est-elle levée après la lecture d'un noeud ou avant? – Joel

+0

Salut Joe, merci d'avoir lu. Après avoir lu le premier (c'est-à-dire dans la boucle while), l'exception a été lancée. – Chan

+0

Non, il attrape l'exception et l'imprime en utilisant 'System.out.println (...)' qui n'appellera que la méthode 'Exception.toString()', par défaut le nom de la classe et le message, il n'est pas inclure la trace de la pile. Si vous voulez imprimer la trace de la pile, vous devez utiliser 'e.printStackTrace()' par exemple. – Reboot

Répondre

2

Il ressemble d'abord n est imprimé, non? Dans ce cas, je parie que nodes est null. Avez-vous oublié d'initialiser la liste?

+0

^_ ^! Exactement mon problème;)! Vous avez une telle supposition incroyable! Un grand merci Peter! – Chan

+0

Remarque: ne pas intercepter d'exception générique. Toujours seulement attraper l'exception concrète qui peut réellement être jeté. –

Questions connexes