Tengo 2 tablas proyecto y fases las cuales tan relacionadas de 1 a muchos respectivamente ...
Código HTML:
<% Vector regs=Sql.consulta("SELECT Id_Proyecto,Nombre_Proyecto,Nombre_Fase from T_Proyecto inner join M_Fase on T_Poryecto.Id_Proyecto=M_Fase.Id_Proyecto); if(regs==null) { out.println("<h3>No hay acceso a la base de datos</h3>"); } else { out.println("<h3>Listado de Proyectos</h3>"); out.println("<table border=2 width='100%' cellspacing=1>"); out.println("<th>Código</th>"); out.println("<th>Nombre </th>"); for(int fils=0; fils<regs.size(); ++fils) { String[] unaFila= (String[]) regs.get(fils); for(int cols=0; cols<unaFila.length; ++cols) { if(fils==0) { // los títulos //out.println("<td><font color=red><b>" + unaFila[cols] + "</b></font></td>"); if(cols==(unaFila.length - 1)) out.println("<td><font color=red><b>acción</b></font></td>"); } else { // los registros out.println("<td>"+unaFila[cols]+"</td>"); //out.println("<td>" + (unaFila[cols].length()!=0 ? unaFila[cols] : " ") + "</td>"); if(cols==(unaFila.length-1)) { // en fila[0] está el ID out.println("<td> <a href='ProyectoUPD.jsp?Id_Proyecto=" + unaFila[0] + "'><img src='../images/upd.gif' border=0 title='Editar'></a>"); out.println(" <a href='ProyectoDEL.jsp?Id_Proyecto=" + unaFila[0] + "'><img src='../images/del.gif' border=0 title='Eliminar'></a></td>"); } } } out.println("</tr>"); } out.println("</table>"); } %>
Nombre de Proyecto|Nombre de Fase|
Proyecto 1 | Fase 1|
Proyecto 2 | Fase 1|
Proyecto 1| Fase 2|
Y lo que quiero hacer es que lo muestre de la siguiente manera..
Proyecto 1|Fase 1|Fase 2|
Proyecto 2|Fase 1|
Proyecto 3|Fase 1|Fase 2|Fase 3|Fase n...|
Adjunto mi metodo consulta:
Código HTML:
static public Vector consulta(String sql) { Vector regs = new Vector(); try { ConectaDB db = new ConectaDB(); Connection cn = db.getConnection(); if (cn == null) { regs = null; } else { Statement st = cn.createStatement(); ResultSet rs = st.executeQuery(sql); ResultSetMetaData rm = rs.getMetaData(); int numCols = rm.getColumnCount(); // Toma los títulos de las columnas String[] titCols= new String[numCols]; for(int i=0; i<numCols; ++i) titCols[i]= rm.getColumnName(i+1); // la fila 0 del vector lleva los títulos de las columnas regs.add(titCols); // toma las filas de la consulta while(rs.next()) { String[] reg= new String[numCols]; for(int i=0; i<numCols; i++) { reg[i] = rs.getString(i + 1); } regs.add(reg); } rs.close(); st.close(); cn.close(); } } catch(SQLException e) { regs= null; } catch(Exception e) { regs= null; } return regs; }