【问题标题】:how to break columns in a table using jdbc如何使用jdbc打破表中的列
【发布时间】:2013-10-03 16:00:05
【问题描述】:

我正在制作一个简单的表格,它使用 jdbc 连接存储来自数据库的产品详细信息。

我的桌子是这样的:

    <table>

     <td>

    <img border="3"  
        src="image path" height="200" width="200" />

        <p align="center"></p>    // these tag contains specific product details from db
        <p align="center"></p> 

      </td>   
      </table>

现在我正在获取特定列中的每个产品详细信息(即单行中的多列),但我的问题是这一行不断扩展,我希望这一行(由多列组成)自动中断让每 5 件产品再说一次。

简单来说,我想像在 Flipkart 中一样以 4 x n 格式排列我的产品详细信息,如下所示:

http://www.flipkart.com/mobiles/android-phones~type/pr?sid=tyy,4io&otracker=hp_nmenu_sub_electronics_0_Android%20phones

您可以看到第一个产品 sony experia 然后 lg 然后在 samsung Galaxy 产品之后,新行开始,然后又是 4 个产品,然后是新行。这样,我需要使用 jdbc 连接显示来自数据库的产品。

谁能建议我实现这一目标的最佳方法是什么。 & 是否有任何选项可以在第 4 个之后断开列然后开始新行?

我在jsp中显示数据库内容如下图,只是为了演示:

       <%   
        //1. Retrieve all products from database   

        //1a.  Load the Driver   
        Class.forName("com.mysql.jdbc.Driver");   
        //1b.  Get a connection to the database   
        Connection con = DriverManager.getConnection("url", "un", "pwd
        PreparedStatement ps = con.prepareStatement("SELECT * FROM table");   
        //1d.  Execute and retrieve our result   
        ResultSet rs = ps.executeQuery();   

        //2. Base on the results returned, construct a table   
    %>   
    </p>   

    <table border="0">    
     <%     

     if(rs.next()) {        
     rs.beforeFirst();  // for making sure you dont miss the first record.      
      while(rs.next())      
          {                        // opening while loop brackets.      

     %>        



        <td>   
     <div style=""><img border="3"  
        src="<%=rs.getString("image") %>" height="200" width="200" /></div>   


        <p align="center"><%=rs.getString("title")%></p>
        <p align="center"><%=rs.getString("price")%></p> 

       </td>   


        <%        
            } //closing while loop bracket      
         }        
         else {        
             //if no record is found, simply display a no record message        
     %>        
         Nothing.        
         <%        
         }        
      %>     

       </table>    

【问题讨论】:

  • &lt;tr&gt;&lt;/tr&gt; 在这里可能会有所帮助。
  • 使用 div 而不是 table 来实现流畅的布局...根据屏幕宽度流到下一行的布局。
  • @AC1 我使用 div 而不是 table 进行液体布局,但产品随后出现在另一个之下。接下来我应该使用什么?
  • 你试过css属性了吗:display:inline;位置:相对; float:left 用于 div 吗?

标签: java html jsp jdbc html-table


【解决方案1】:

使用&lt;tr&gt; 标签按行组织表格。 (这就是它所代表的 - *t*able *r*ow。)

跟踪您从数据库中读取的产品数量 (N)。如果 N 是 4 的倍数 (n % 4 == 0),请关闭 &lt;tr&gt; 并开始一个新的。

所以结果如下:

<table>
  <tr>
    <td>...</td>
    <td>...</td>
    <td>...</td>
    <td>...</td>
  </tr>
  <tr>
    <td>...</td>
    <td>...</td>
    <td>...</td>
    <td>...</td>
  </tr>
</table>

更新基于更新的问题:

这是我根据您的代码进行的调整。我真的不提倡在 JSP 中执行 SQL 调用(或实际上任何非表示层代码),但这是另一个问题的问题。

<%   
    //1. Retrieve all products from database   

    //1a.  Load the Driver   
    Class.forName("com.mysql.jdbc.Driver");   
    //1b.  Get a connection to the database   
    Connection con = DriverManager.getConnection("url", "un", "pwd
    PreparedStatement ps = con.prepareStatement("SELECT * FROM table");   
    //1d.  Execute and retrieve our result   
    ResultSet rs = ps.executeQuery();   

    //2. Base on the results returned, construct a table   
%>   
</p>   

<table border="0">
  <tr>
   <%     

   int i = 0;
   if(rs.next()) {
   rs.beforeFirst();  // for making sure you dont miss the first record.      
     while(rs.next())      
       {                        // opening while loop brackets.
   %>

    <td>   
      <div style=""><img border="3"  
          src="<%=rs.getString("image") %>" height="200" width="200" /></div>   


      <p align="center"><%=rs.getString("title")%></p>
      <p align="center"><%=rs.getString("price")%></p> 

    </td>

    <%
      i++;
      if ((i % 4) == 0) {
    %>
        </tr>
    <%
      }

      if (!rs.isLast()) {  // don't open a new row if this is the last result
    %>
        <tr>
    <%
      }  // closing isLast check
    %>

    <%        
        } //closing while loop bracket      
     }        
     else {        
         //if no record is found, simply display a no record message        
 %>        
     Nothing.        
     <%        
     }        
  %>     
    </tr>

   </table>

我真的没有耐心纠正这里的空白,我还没有真正编译过这个,但希望你能明白要点。

【讨论】:

  • 嘿,但是根据上面的表结构放置while循环以获得4列和n行
  • 我提供的表结构是你的输出。每个&lt;tr&gt; 是一个表格行。在每个 &lt;tr&gt; 中放置 4 个 &lt;td&gt;s,您就有 4 列和 N 行。您没有将循环 in 放在表格中;您在代码中创建一个循环以生成上述结构。您当前生成当前表的代码是什么?更新你的问题,我会更新我的答案。
  • 请查看我更新的问题,最后我提到了我的代码(仅用于演示)。如果可能,请告诉我可能的解决方案。
  • 查看更新的答案。您可以使用rs.getRow() 来计算行数,而不是使用i,但文档说这种方法并不是普遍需要的,所以最好自己计算。
【解决方案2】:

除了来自 dcsohl 的响应之外,您还可以使用 &lt;div&gt;&lt;span&gt; 元素的组合。 &lt;div&gt; 元素是一个块元素,也就是说,每个&lt;div&gt; 都会在新行中呈现。 &lt;span&gt; 元素是一个内联元素。

这应该对你有帮助:

<div>
    <span></span>
    <span></span>
    <span></span>
    <span></span>
    <span></span>
</div>
<div>
    <span></span>
    <span></span>
    <span></span>
    <span></span>
    <span></span>
</div>
<div>
    <span></span>
    <span></span>
    <span></span>
    <span></span>
    <span></span>
</div>

【讨论】:

    猜你喜欢
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    相关资源
    最近更新 更多