2016-05-17 42 views
0

我想將DAO中的對象的值打印到servlet中。將DAO中的對象的值傳遞給2D數組中的servlet

DAO:

public static List getFree(String svLectID,String ExLectID) throws SQLException, ClassNotFoundException 
    { 
     currentCon = JavaConnectionDB.getConnection() ; 
     PreparedStatement ps1 = currentCon.prepareStatement("SELECT *\n" + 
                  "FROM (\n" + 
                  "  SELECT  e1.FreeID,\n" + 
                  "     e1.lecturerID SVID,\n" + 
                  "     e1.availableID SVavail,\n" + 
                  "     e1.freedate AS SVFree,\n" + 
                  "     e2.lecturerID AS Examiner, \n" + 
                  "     e2.freedate EXFree,\n" + 
                  "     s.studentID,\n" + 
                  "     s.studentName,\n" + 
                  "     s.lecturerID AS lectID,\n" + 
                  "     sv.lecturerID AS SVlecturerID,\n" + 
                  "     sv.lecturerFullname AS SVlecturerName,\n" + 
                  "     ex.lecturerID AS EXlecturerID,\n" + 
                  "     ex.lecturerFullname AS EXlecturerName,\n" + 
                  "     v.availableID availID,\n" + 
                  "     v.availableDay,\n" + 
                  "     v.availableStart,\n" + 
                  "     v.availableEnd,\n" + 
                  "     ROW_NUMBER() OVER (PARTITION BY e1.lecturerID \n" + 
                  "          ORDER BY dbms_random.random) AS rn\n" + 
                  "  FROM  free e1 \n" + 
                  "  INNER JOIN free e2 \n" + 
                  "    ON e1.availableID = e2.availableID\n" + 
                  "  INNER JOIN student s\n" + 
                  "    ON s.lecturerID = e1.lecturerID\n" + 
                  "  INNER JOIN lecturer sv\n" + 
                  "    ON sv.lecturerID = e1.lecturerID\n" + 
                  "  INNER JOIN lecturer ex\n" + 
                  "    ON ex.lecturerID = e2.lecturerID\n" + 
                  "  INNER JOIN availability v\n" + 
                  "    ON v.availableID = e2.availableID\n" + 
                  "    \n" + 
                  "  \n" + 
                  "  WHERE  e1.lecturerID = ? \n" + 
                  "    AND e2.lecturerID = ? \n" + 
                  "    ORDER BY e2.availableID asc\n" + 
                  "    \n" + 
                  "  )\n" + 
                  "WHERE rn <=5") ; 
     ps1.setString(1, svLectID) ; 
     ps1.setString(2, ExLectID); 
     List list = new ArrayList() ; 
     ResultSet rs1 = ps1.executeQuery() ; 
     while(rs1.next()) 
     { 
      Object[] obj = new Object[17] ; 
      obj[0] = rs1.getString(1) ; 
      obj[1] = rs1.getString(2); 
      obj[2] = rs1.getInt(3); 
      obj[3] = rs1.getDate(4); 
      obj[4] = rs1.getString(5); 
      obj[5] = rs1.getDate(6); 
      obj[6] = rs1.getString(7); 
      obj[7] = rs1.getString(8); 
      obj[8] = rs1.getString(9); 
      obj[9] = rs1.getString(10); 
      obj[10] = rs1.getString(11); 
      obj[11] = rs1.getString(12); 
      obj[12] = rs1.getString(13); 
      obj[13] = rs1.getInt(14); 
      obj[14] = rs1.getString(15); 
      obj[15] = rs1.getDate(16); 
      obj[16] = rs1.getDate(17); 
      list.add(obj) ; 
      System.out.println("zabir "+rs1.getString(8)); 
     } 
     return list ; 
    } 

正如你可以看到這些值存儲在一個對象到一個列表。我將這些值檢索到servlet。

SERVLET:

public void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, java.io.IOException { 

     currentCon = JavaConnectionDB.getConnection(); 


     // Set response content type 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     ServletContext context=getServletContext(); 

     String[] studentID = request.getParameterValues("studentID"); 
     String[] supervisorID = request.getParameterValues("supervisorID"); 
     String[] examinerID = request.getParameterValues("examinerID"); 


     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 


     try{ 
      out.println("<br><center><table><tr>" 
            + "<th>Student Name</th>" 
            + "<th>Project Title</th>" 
            + "<th>Supervisor Name</th>" 
            + "<th>Examiner Name</th>" 
            + "<th>Start</th>" 
            + "<th>End</th>" 
            + "<th>Date</th>" 
            + "</tr>"); 


          for (int i=0 ; i<studentID.length ; i++){ 

           FreeBean free = new FreeBean(); 
           PresentationBean present = new PresentationBean(); 
           StudentBean student = new StudentBean(); 
           List list = new ArrayList() ; 

           int SVavailableID = free.getAvailableID(); 
           int EXavailableID = free.getAvailableID(); 


           list = GenerateScheduleDAO.getFree(supervisorID[i],examinerID[i]); 

           System.out.println(list.get(0)); //DEBUGGED HERE 
           System.out.println(list); //DEBUGGED HERE 


           out.println("<tr>"); 
           out.println("<tr>"); 
           out.println("<td>"+ studentID[i]+"</td>"); 
           out.println("<td> Hello </td>"); 
           out.println("<td>"+ supervisorID[i] +"</td>"); 
           out.println("<td>"+ examinerID[i] +"</td>"); 
           out.println("<td>"+ SVavailableID+"</td>"); 
           out.println("<td>"+ EXavailableID+"</td>"); 
           out.println("<td>"+ EXFreeDate+"</td>"); 
           out.println("</tr>"); 


          }//student loop 
          out.println("</center></table><br><br>"); 

     out.println("</body>"); 
     out.println("</html>");    
     }// first try 
     catch (Exception e) 
       { 
        e.printStackTrace() ; 
       }//first catch 

    }//throws method 

我第一次嘗試使用SOP這樣得到的數值:

System.out.println(list.get(0)); //DEBUGGED HERE 
System.out.println(list); //DEBUGGED HERE 

首先SOP產品:[Ljava.lang.Object;@13432ad 二SOP產品:[[Ljava.lang.Object;@1dd079f,

我的第一個假設是get(0)會給我FreeID值。正如DAO聲明的那樣。 那麼如果使用get(0)是錯誤的,我怎麼能得到這個值呢?

回答

1

您的freeId應位於方法getFree返回的list中的每個陣列的第一個位置。

要獲得的第一個元素的freeIdlist,你應該這樣做:

System.out.println((Object[]) list.get(0))[0]); 

對於列表的第二個元素的freeId:

System.out.println((Object[]) list.get(1))[0]); 

等。

這將是更具可讀性做這樣的事情:

Object[] firstObjectAsArray = (Object[]) list.get(0); 
System.out.println(firstObjectAsArray[0]); 

Object[] secondObjectAsArray = (Object[]) list.get(1); 
System.out.println(secondObjectAsArray[0]); 

要打印list

for (Object objectAsArray : list) { 
    System.out.println(((Object[]) objectAsArray)[0]); 
} 

注意的所有元素的freeId:看你的代碼沒有必要創建一個空列表。代碼:

List list = new ArrayList() ; // Not necessary 
int SVavailableID = free.getAvailableID(); 
int EXavailableID = free.getAvailableID(); 
list = GenerateScheduleDAO.getFree(supervisorID[i],examinerID[i]); 

可以優化爲:

int SVavailableID = free.getAvailableID(); 
int EXavailableID = free.getAvailableID(); 
List list = GenerateScheduleDAO.getFree(supervisorID[i],examinerID[i]); 

注:使用泛型你不需要投。要做到這一點與

List<Object[]> list = new ArrayList<Object[]>(); 
+0

老實說,我已經嘗試了(1)[0]'之前使用'list.get。但我仍然有錯誤。錯誤是'需要數組,但是找到對象' – user6308605

+0

是的,因爲你需要用泛型定義列表或者你需要明確的轉換 –

+0

對不起。你什麼意思?你能舉一個例子嗎? – user6308605

1

list更換名單

List list = new ArrayList(); 

的定義包含數組對象的,所以你必須調用數組的相關指標。

你可以調試的完整列表,這樣

// iterate over the list 
for (int i = 0; i < list.size(); i++) { 

      Object[] array = (Object[])(list.get(i)); 

      // iterate over the Object array 
      for (int j = 0; j < array.length; j++) { 

       System.out.println(array[j]); 

      } 

} 
+0

只需在該列表下方添加代碼:list = GenerateScheduleDAO.getFree(supervisorID [i],examinerID [i]);'right? – user6308605

+0

是的,它與您在代碼中使用的完全相同。 – Berger

+0

我將轉換添加到Object數組。然而,正如@Davide Lorenzo MARINO所說的,將你的名單無處不在地列爲'List '將會避免需要鑄造 – Berger

相關問題