2012-03-14 87 views
-1

右鍵,下面這段代碼應做到以下幾點,創建一個SQL語句,將通過比較兩個表,一個預訂表的預訂ID和找到自由路由ID與路由表中的所有ID的SQL錯誤ORA-00933:SQL命令不能正確地結束/ Java的

這將返回自由路由,它的ID。但我嘗試過的棘手的部分是將其插入列表中,以便隨機化列表並返回隨機路由。

錯誤發生在這附近。任何人都可以告訴我什麼是錯誤的,我如何修補它?

//<editor-fold defaultstate="collapsed" desc="To select all free routes"> 
       try { 
        Class.forName("oracle.jdbc.driver.OracleDriver"); 
        //load the oracle driver...needs to be in classes folder in jre folder 
       } catch (ClassNotFoundException e) { 
        System.out.println(
          " Can't find class oracle.jdbc.driver.OracleDriver"); 
        System.exit(1); 
       } 

      Connection conn3 = null; 
      //new connection object 
      Statement stmtFreeR = null; 
      //new statemnt object 
      ResultSet freeRoute = null; 
      //new record set object 
      try { 
       conn3 = DriverManager.getConnection("jdbc:oracle:thin:@oracle.staff.ittralee.ie:1521:orcl", 
         "*", "*"); 
       stmtFreeR = conn3.createStatement(); 
       // create the statement for this connection 
       //</editor-fold> 

       freeRoute = stmtFreeR.executeQuery(
       "SELECT r.ROUTEID FROM Route r LEFT JOIN Booking b " 
         + "ON r.ROUTEID=b.ROUTEID WHERE b.ROUTEID is null "); 
       // get the results of select query and store in recordset object 


       while (freeRoute.next()) { 
        // move to first/next record of recordset 
        JOptionPane.showMessageDialog(null, "Check: Select all free routes: " + freeRoute.getString(1)); 
        //JOptionPane.showMessageDialog(null, " the answer is " + fRoutes); 
        // output next record using string format 
       } 

       //<editor-fold defaultstate="collapsed" desc="Error handling for Select Statement"> 
       freeRoute.close(); 
       freeRoute = null; 
       stmtFreeR.close(); 
       stmtFreeR = null; 
       conn3.close(); 
       conn3 = null; 

      } catch (SQLException e) { 
       System.out.println(" A SQL error: " + e.getMessage()); 

      } finally { 
       if (freeRoute != null) { 
        try { 
         freeRoute.close(); 
        } catch (SQLException ignore) { 
        } 
       } 

       if (stmtFreeR != null) { 
        try { 
         stmtFreeR.close(); 
        } catch (SQLException ignore) { 
        } 
       } 

       if (conn3 != null) { 
        try { 
         conn3.close(); 
        } catch (SQLException ignore) { 
        } 
       } 
      } 

      //<editor-fold defaultstate="collapsed" desc="To randomize free routes">    
      if(freeRoute != null) {  
      List RouteX = new ArrayList(); 

      while (freeRoute.next()) { 
       RouteX.add(freeRoute.getString(1));  
       Collections.shuffle(RouteX);  
       JOptionPane.showMessageDialog(null, "Free routes list: " + RouteX); 
      } 
      }  
     else {  
      List RouteX = new ArrayList();  
//ERROR OCCURS HERE 
      while (freeRoute.next()) { 
       RouteX.add(freeRoute.getString (1));  
       Collections.shuffle (RouteX);  
       JOptionPane.showMessageDialog (null,"Free routes list: " + RouteX);  
      } 
     } 
+0

中的ResultSet'freeRoute'是try-catch塊內完整地閱讀,並關閉了最後子句。你以後如何在代碼中讀取它?請發佈失敗的_actual_代碼。 – 2012-03-14 15:59:10

+0

包含失敗的代碼,我在它出現的行的上方添加註釋。但我明白你的意思,它不能讀取已經關閉的東西。 – user1081326 2012-03-14 16:05:26

回答

0

那麼你正在嘗試進行連接,但在你的where子句中檢查ID是否爲空。你可以試着改變這種何處:WHERE b.ROUTEID不爲空

+0

感謝您的快速響應,我改變代碼後仍然會產生相同的錯誤 – user1081326 2012-03-14 15:50:23

相關問題