2009-12-17 5 views
-2

J'ai une classe "Manager" et aussi une frame qui est "Report". Dans le cadre j'ai trois boutons radio dont les textes sont "Années avant 1970", "entre 1970 et 2000", "années après 2000" et si l'un d'entre eux est sélectionné, dans le champ de texte ci-dessous ces boutons radio, je vais montrer le nombre de lignes qui ont cette situation qui sont dans ma table SQL.aussi dans ma table SQL j'ai créé une table qui a name, family, fatherName , motherName, dateOfBirth, placeOfBirth, Aussi la première colonne est ID qui est créée automatiquement. le texte dans la colonne dateOfBirth est comme "5 décembre 2009" et j'ai juste besoin de son année !!! mais quand je cours ce code ces trace de pile seront montrées dans la console, pourquoi ?? Aidez-moi, s'il vous plaît.pourquoi il renvoie l'exception SQL?

ma classe Manager (juste une partie de ce):

public static int getPercent(String i)throws SQLException{ 
    Statement stmt = conn.createStatement(); 
    List<String> list = null; 
    if(i.equals("O")){ 


     ResultSet rst = stmt.executeQuery("SELECT dateOfBirth from birthtable"); 
     while(rst.next()){ 
      String s1 = rst.getString(6) ; 
      if(rst.wasNull()){ 
       s1=null; 
      } 
      String s2 = s1.substring(s1.length()-4); 
      int s3 = Integer.parseInt(s2); 
      if(list ==null&& s3<1970){ 
       list = new ArrayList<String>(); 
      } 
      else{ 
       list = new ArrayList<String>(); 
       s2 = null; 
      } 
      list.add(s2); 
     } 


    } 
    if(i.equals("N")){ 

     ResultSet rst = stmt.executeQuery("SELECT dateOfBirth from birthtable"); 
     while(rst.next()){ 
      String s1 = rst.getString(6) ; 
      if(rst.wasNull()){ 
       s1=null; 
      } 
      String s2 = s1.substring(s1.length()-4); 
      int s3 = Integer.parseInt(s2); 
      if(list ==null&&s3>2000){ 
       list = new ArrayList<String>(); 
      } 
      else{ 
       list = new ArrayList<String>(0); 
       s2 = null; 
      } 
      list.add(s2); 
     } 
    } 
    if(i.equals("H")){ 
     ResultSet rst = stmt.executeQuery("SELECT dateOfBirth from birthtable"); 
     while(rst.next()){ 
      String s1 = rst.getString(6) ; 
      if(rst.wasNull()){ 
       s1=null; 
      } 
      String s2 = s1.substring(s1.length()-4); 
      int s3 = Integer.parseInt(s2); 
      if(list ==null&&s3>1970&& s3<2000){ 
       list = new ArrayList<String>(); 
      } 
      else{ 
       list = new ArrayList<String>(0); 
       s2 = null; 
      } 
      list.add(s2); 
     } 
    } 
    return list.size(); 
} 

mon cadre (juste une partie de cela):

private void range1ActionPerformed(java.awt.event.ActionEvent evt) { 
    int i = 0; 
    try { 
     i = Manager.getPercent("O"); 
    } catch (SQLException ex) { 
     Logger.getLogger(BirthReport.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    resulText.setText(i+""); 
} 

stacktarce:

 Dec 17, 2009 7:57:48 AM AdminGUI.BirthReport range1ActionPerformed 
    SEVERE: null 

java.sql.SQLException: Column Index out of range, 6 > 1. 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) 
     at com.mysql.jdbc.ResultSetImpl.checkColumnBounds(ResultSetImpl.java:792) 
     at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5529) 
     at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448) 
     at database.Manager.getPercent(Manager.java:1137) 
     at AdminGUI.BirthReport.range1ActionPerformed(BirthReport.java:152) 
     at AdminGUI.BirthReport.access$100(BirthReport.java:23) 
     at AdminGUI.BirthReport$2.actionPerformed(BirthReport.java:84) 
     at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
     at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
     at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
     at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:291) 
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
     at java.awt.Component.processMouseEvent(Component.java:6038) 
     at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) 
     at java.awt.Component.processEvent(Component.java:5803) 
     at java.awt.Container.processEvent(Container.java:2058) 
     at java.awt.Component.dispatchEventImpl(Component.java:4410) 
     at java.awt.Container.dispatchEventImpl(Container.java:2116) 
     at java.awt.Component.dispatchEvent(Component.java:4240) 
     at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) 
     at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) 
     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) 
     at java.awt.Container.dispatchEventImpl(Container.java:2102) 
     at java.awt.Window.dispatchEventImpl(Window.java:2429) 
     at java.awt.Component.dispatchEvent(Component.java:4240) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:177) 
     at java.awt.Dialog$1.run(Dialog.java:1039) 
     at java.awt.Dialog$3.run(Dialog.java:1091) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.awt.Dialog.show(Dialog.java:1089) 
     at java.awt.Component.show(Component.java:1419) 
     at java.awt.Component.setVisible(Component.java:1372) 
     at java.awt.Window.setVisible(Window.java:801) 
     at java.awt.Dialog.setVisible(Dialog.java:979) 
     at AdminGUI.BirthFrame.jButton1ActionPerformed(BirthFrame.java:190) 
     at AdminGUI.BirthFrame.access$300(BirthFrame.java:21) 
     at AdminGUI.BirthFrame$4.actionPerformed(BirthFrame.java:94) 
     at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
     at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
     at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
     at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
     at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272) 
     at java.awt.Component.processMouseEvent(Component.java:6038) 
     at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) 
     at java.awt.Component.processEvent(Component.java:5803) 
     at java.awt.Container.processEvent(Container.java:2058) 
     at java.awt.Component.dispatchEventImpl(Component.java:4410) 
     at java.awt.Container.dispatchEventImpl(Container.java:2116) 
     at java.awt.Component.dispatchEvent(Component.java:4240) 
     at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) 
     at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) 
     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) 
     at java.awt.Container.dispatchEventImpl(Container.java:2102) 
     at java.awt.Window.dispatchEventImpl(Window.java:2429) 
     at java.awt.Component.dispatchEvent(Component.java:4240) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) 
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) 
+1

Que se passe-t-il à la ligne 1137 de votre cours Manager? –

+0

Je comprends, [:-)] mais quand "années avant 1970" est sélectionné, il retournera "1" (j'ai juste une ligne) mais l'année est 2006 !! – Johanna

+0

oh, j'obtiens mon erreur que j'ai mis s2 = null; – Johanna

Répondre

3

La réponse est dans la trace de la pile! Regardez la ligne 1137 où vous appelez getString (6). Maintenant, regardez le message d'erreur: java.sql.SQLException: Column Index hors de portée, 6> 1. regardez maintenant votre requête: "SELECT dateOfBirth from birthtable".

Vous demandez (dans la requête) pour 1 valeur (dateOfBirth) et ils vous essayez de l'obtenir comme la 6ème valeur retournée ... alors changez le 6 en un .......... 1 et ça devrait marcher.

Vous avez vraiment besoin de lire les messages - ils vous en disent beaucoup.

+0

merci, [: ">] .Je fixe, mais quand" années avant 1970 "est sélectionné, il retournera" 1 "(j'ai juste une ligne) mais l'année est 2006 !! – Johanna

+1

bien votre code est assez mauvais Pour être honnête ... j'allais vous montrer comment faire mieux mais j'ai abandonné à cause des bugs.Une fois que vous avez une version de travail poster le code modifié ici (il suffit d'éditer votre réponse et ajouter le code de travail) et je ' Je vais vous montrer comment le refactoriser pour le rendre meilleur Ce que je ferais est d'utiliser le débogueur ou d'ajouter des instructions System.out.println() pour voir ce qui se passe dans le code et le déboguer de cette façon. – TofuBeer

Questions connexes