2016-01-25 25 views
0

我做了一個簡單的科學測驗的Java應用程序與4幀:登錄,菜單,測試和結果。:對空結果不合法的操作設置

前三架工作正常,但是當我在表演結果單擊它顯示了一個錯誤。這是來自Test JFrame的我的代碼。如果你想我可以給其它幀的編碼也

這是我的錯誤

java.sql.SQLException: Illegal operation on empty result set. 
     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.checkRowPos(ResultSetImpl.java:815) 
     at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5528) 
     at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448) 
     at com.mysql.jdbc.ResultSetImpl.getFloat(ResultSetImpl.java:2499) 
     at Test.ResultBTNActionPerformed(Test.java:292) 
     at Test.access$500(Test.java:18) 
     at Test$6.actionPerformed(Test.java:215) 
     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.Component.processMouseEvent(Component.java:6216) 
     at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) 
     at java.awt.Component.processEvent(Component.java:5981) 
     at java.awt.Container.processEvent(Container.java:2041) 
     at java.awt.Component.dispatchEventImpl(Component.java:4583) 
     at java.awt.Container.dispatchEventImpl(Container.java:2099) 
     at java.awt.Component.dispatchEvent(Component.java:4413) 
     at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556) 
     at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220) 
     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150) 
     at java.awt.Container.dispatchEventImpl(Container.java:2085) 
     at java.awt.Window.dispatchEventImpl(Window.java:2475) 
     at java.awt.Component.dispatchEvent(Component.java:4413) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

測試的JFrame編碼

import java.sql.*; 
import javax.swing.JOptionPane; 
public class Test extends javax.swing.JFrame { 
    String ID; 
    String Subject; 
    int index =1; 
    int max =0; 
    int result = 0; 
    char [] answers; 
    /** Creates new form Test */ 
    public Test() 
    { 
     initComponents(); 
    } 
    public Test(String subject, String id) 
    { 
     initComponents(); 
     ID = id; 
     Subject = subject; 
     PrevBTN.setVisible(false); 
     try 
      { 


      Class.forName("java.sql.Driver"); 
      String database = "jdbc:mysql://localhost:3306/quizdb"; 
      Connection conn = DriverManager.getConnection(database, "root", "1234"); 
      Statement stmt = conn.createStatement(); 

      String sql = "select max(SNo) from " + Subject; 
      ResultSet rs = stmt.executeQuery(sql); 
      rs.next(); 
      max = rs.getInt(1); 
      answers = new char[max]; 
      for(int i=0; i<max;i++) 
       answers[i] = 'e'; 
      rs.close(); 
      stmt.close(); 
      conn.close(); 
      getQues(); 
      } 
      catch(Exception e){ e.printStackTrace(); 
      } 
    } 
    private void getQues() 
    { 
     try 
     { 

      Class.forName("java.sql.Driver"); 
      String database = "jdbc:mysql://localhost:3306/quizdb"; 
      Connection conn = DriverManager.getConnection(database, "root", "1234"); 
      Statement stmt = conn.createStatement(); 

      String sql = "select * from " + Subject + " where SNo = " + index; 
      ResultSet rs = stmt.executeQuery(sql); 
      rs.next(); 
      QuesTA.setText("\nQ" + index + ". " + rs.getString(2)); 
      a.setText(rs.getString("a")); 
      b.setText(rs.getString("b")); 
      c.setText(rs.getString("c")); 
      d.setText(rs.getString("d")); 
      a.setSelected(answers[index-1] == 'a'); 
      b.setSelected(answers[index-1] == 'b'); 
      c.setSelected(answers[index-1] == 'c'); 
      d.setSelected(answers[index-1] == 'd'); 
      e.setSelected(answers[index-1] == 'e'); 
      rs.close(); 
      stmt.close(); 
      conn.close(); 
     } 
     catch(Exception e){ e.printStackTrace(); } 
    } 

    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     buttonGroup1 = new javax.swing.ButtonGroup(); 
     jLabel2 = new javax.swing.JLabel(); 
     a = new javax.swing.JRadioButton(); 
     b = new javax.swing.JRadioButton(); 
     c = new javax.swing.JRadioButton(); 
     jScrollPane1 = new javax.swing.JScrollPane(); 
     QuesTA = new javax.swing.JTextArea(); 
     PrevBTN = new javax.swing.JButton(); 
     NextBTN = new javax.swing.JButton(); 
     ResultBTN = new javax.swing.JButton(); 
     d = new javax.swing.JRadioButton(); 
     jLabel1 = new javax.swing.JLabel(); 
     e = new javax.swing.JRadioButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     setTitle("Quiz Time"); 
     setResizable(false); 
     getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); 

     jLabel2.setFont(new java.awt.Font("Castellar", 1, 36)); 
     jLabel2.setForeground(new java.awt.Color(255, 0, 51)); 
     jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel2.setText("SCIENCE QUIZ"); 
     getContentPane().add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(111, 20, 360, -1)); 

     buttonGroup1.add(a); 
     a.setFont(new java.awt.Font("Tahoma", 1, 14)); 
     a.setForeground(new java.awt.Color(102, 0, 102)); 
     a.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     a.setOpaque(false); 
     a.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       aActionPerformed(evt); 
      } 
     }); 
     getContentPane().add(a, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 210, -1, -1)); 

     buttonGroup1.add(b); 
     b.setFont(new java.awt.Font("Tahoma", 1, 14)); 
     b.setForeground(new java.awt.Color(102, 0, 102)); 
     b.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     b.setOpaque(false); 
     b.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       bActionPerformed(evt); 
      } 
     }); 
     getContentPane().add(b, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 240, -1, -1)); 

     buttonGroup1.add(c); 
     c.setFont(new java.awt.Font("Tahoma", 1, 14)); 
     c.setForeground(new java.awt.Color(102, 0, 102)); 
     c.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     c.setOpaque(false); 
     c.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       cActionPerformed(evt); 
      } 
     }); 
     getContentPane().add(c, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 270, -1, -1)); 

     jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     jScrollPane1.setAlignmentX(5.0F); 
     jScrollPane1.setAlignmentY(5.0F); 

     QuesTA.setBackground(new java.awt.Color(248, 241, 244)); 
     QuesTA.setColumns(20); 
     QuesTA.setEditable(false); 
     QuesTA.setFont(new java.awt.Font("Tahoma", 0, 18)); 
     QuesTA.setForeground(new java.awt.Color(0, 153, 153)); 
     QuesTA.setLineWrap(true); 
     QuesTA.setRows(3); 
     QuesTA.setWrapStyleWord(true); 
     QuesTA.setAutoscrolls(false); 
     QuesTA.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED, new java.awt.Color(204, 0, 204), new java.awt.Color(204, 0, 204), new java.awt.Color(153, 0, 153), new java.awt.Color(153, 0, 153))); 
     QuesTA.setSelectionColor(new java.awt.Color(255, 255, 51)); 
     jScrollPane1.setViewportView(QuesTA); 

     getContentPane().add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 80, 460, 100)); 

     PrevBTN.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.highlight")); 
     PrevBTN.setFont(new java.awt.Font("Tahoma", 1, 16)); // NOI18N 
     PrevBTN.setForeground(new java.awt.Color(0, 102, 102)); 
     PrevBTN.setText("<< Prev"); 
     PrevBTN.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED, new java.awt.Color(255, 204, 255), new java.awt.Color(255, 204, 255), new java.awt.Color(153, 0, 153), new java.awt.Color(153, 0, 153))); 
     PrevBTN.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       PrevBTNActionPerformed(evt); 
      } 
     }); 
     getContentPane().add(PrevBTN, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 370, 90, 40)); 

     NextBTN.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.highlight")); 
     NextBTN.setFont(new java.awt.Font("Tahoma", 1, 16)); // NOI18N 
     NextBTN.setForeground(new java.awt.Color(0, 102, 153)); 
     NextBTN.setText("Next >>"); 
     NextBTN.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED, new java.awt.Color(255, 204, 255), new java.awt.Color(255, 204, 255), new java.awt.Color(153, 0, 153), new java.awt.Color(153, 0, 153))); 
     NextBTN.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       NextBTNActionPerformed(evt); 
      } 
     }); 
     getContentPane().add(NextBTN, new org.netbeans.lib.awtextra.AbsoluteConstraints(450, 370, 90, 40)); 

     ResultBTN.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.highlight")); 
     ResultBTN.setFont(new java.awt.Font("Castellar", 1, 16)); // NOI18N 
     ResultBTN.setForeground(new java.awt.Color(0, 102, 102)); 
     ResultBTN.setText("GEt RESULT"); 
     ResultBTN.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED, new java.awt.Color(255, 204, 255), new java.awt.Color(255, 204, 255), new java.awt.Color(153, 0, 153), new java.awt.Color(153, 0, 153))); 
     ResultBTN.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       ResultBTNActionPerformed(evt); 
      } 
     }); 
     getContentPane().add(ResultBTN, new org.netbeans.lib.awtextra.AbsoluteConstraints(210, 370, 140, 40)); 

     buttonGroup1.add(d); 
     d.setFont(new java.awt.Font("Tahoma", 1, 14)); 
     d.setForeground(new java.awt.Color(102, 0, 102)); 
     d.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     d.setOpaque(false); 
     d.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       dActionPerformed(evt); 
      } 
     }); 
     getContentPane().add(d, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 300, -1, -1)); 

     jLabel1.setFont(new java.awt.Font("Tahoma", 0, 14)); 
     jLabel1.setForeground(new java.awt.Color(102, 0, 102)); 
     jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel1.setOpaque(true); 
     getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, -1, 430)); 

     buttonGroup1.add(e); 
     getContentPane().add(e, new org.netbeans.lib.awtextra.AbsoluteConstraints(550, 450, 10, 10)); 

     pack(); 
    }// </editor-fold>       

    private void PrevBTNActionPerformed(java.awt.event.ActionEvent evt) {           
      index--; 
      getQues(); 
      if(index == 1) 
       PrevBTN.setVisible(false); 
      if(index < max) 
       NextBTN.setVisible(true); 
}          

    private void NextBTNActionPerformed(java.awt.event.ActionEvent evt) {           
      index++; 
      getQues(); 
      if(index == max) 
       NextBTN.setVisible(false); 
      if(index > 1) 
       PrevBTN.setVisible(true); 
}          

    private void bActionPerformed(java.awt.event.ActionEvent evt) {         
     answers[index-1] = 'b'; 
}         

    private void ResultBTNActionPerformed(java.awt.event.ActionEvent evt) {           
     try 
     { 

       Class.forName("java.sql.Driver"); 
      String database = "jdbc:mysql://localhost:3306/quizdb"; 
      Connection conn = DriverManager.getConnection(database, "root", "1234"); 
      Statement stmt = conn.createStatement(); 

      String sql = "select Result from " + Subject; 
      ResultSet rs = stmt.executeQuery(sql); 
      int i = 0; 
      while(rs.next()) 
      { 
       char ans = rs.getString(1).charAt(0); 
       if(ans == answers[i]) 
        result++; 
       i++; 
      } 
      float res = ((float)result * 100)/max; 
      sql = "Select " + Subject + "Result from Result where ID = '" + ID + "'"; 
      rs = stmt.executeQuery(sql); 
      rs.next(); 
      if(res > rs.getFloat(1)) 
      { 
       sql = "update Result set " + Subject + "Result = " + res + " where ID = '" + ID + "'"; 
       stmt.executeUpdate(sql); 
      } 
      stmt.close(); 
      conn.close(); 
      new Result(res,ID).setVisible(true); 
      this.setVisible(false); 
     } 
     catch(Exception e) 
     { e.printStackTrace(); 
           } 
}           

    private void aActionPerformed(java.awt.event.ActionEvent evt) {         
     answers[index-1] = 'a'; 
    }         

    private void cActionPerformed(java.awt.event.ActionEvent evt) {         
     answers[index-1] = 'c'; 
    }         

    private void dActionPerformed(java.awt.event.ActionEvent evt) {         
     answers[index-1] = 'd'; 
    }         

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new Test().setVisible(true); 
      } 
     }); 
    } 

回答

1

取而代之的是原rs.next()你需要檢查結果(返回false如果沒有更多的行)......類似的東西,

if (rs.next()) { 
    max = rs.getInt(1); 
} 
+0

沒有我想它仍然沒有工作@Elliott弗裏希 – rehan

+0

@Rehan同樣的錯誤?如果這是相同的錯誤,那麼你沒有添加「if」。 –

+0

是它的相同錯誤 – rehan

2

如果您的結果集爲空或不是之前你不檢查。嘗試使用while循環是這樣的:

While(rs.next()){ 
    max = rs.getInt(1); 
     ... 
+0

'select max(SNo)from'應該返回一行(或者不返回)。 –

+0

@ElliottFrisch rs.next()這是一個布爾值,如果真的進入循環如果不是沒有輸入 – Abdelhak

+0

使用後,而在測試屏幕上沒有問題和選項。 – rehan

0

正如在其他的答案說,一個可致電列干將只只要rs.next()返回true。

你的情況:

int max = rs.next() ? rs.getInt(1) : 0; 


float x = rs.next() ? rs.getFloat(1) : 0f; 

也許SQL查詢是不是最合適的了。

在你看到到getFloat調用引發錯誤的堆棧跟蹤。

+0

由於max初始化爲0,因此不需要使用三元表達式 – Abdelhak

+0

@Abdelhak確實;你的答案也解決了這個問題,儘管getFloat也發生了同樣的錯誤。 –

+0

THANX TANX非常感謝我的項目工作完全正常 – rehan