【问题标题】:Show table names in MySQL database and the count of their records显示 MySQL 数据库中的表名及其记录数
【发布时间】:2014-05-26 16:51:01
【问题描述】:

我正在处理课程分配的下一步,我想做一个查询,从数据库中提取元数据以列出其中的表,然后包括表中的记录数。我把它放在它工作的地方,但在前半部分显示它只在记录数应该去的地方放了一个数字 1。在后半部分(我现在这样做是为了测试目的,如果我能让它工作,只会有前半部分)它打印出记录的数量就好了,但我有硬编码的表名。我想要它能够从元数据结果中读取表名,然后执行记录计数的查询。我正在使用 MySQL 数据库在 netbeans 中运行它,并且正在使用 JDBC 驱动程序。

connect();

             try
                {     
                    String db = conn.getCatalog();
                    data.append("The current database " + db + " contains the following tables:\r\n");
                }
             catch(Exception err)
                {
                    System.out.print(err + "\r\n");
                }         

             try
                {   
                    ResultSet rs = null;
                    DatabaseMetaData md = conn.getMetaData();
                    rs = md.getTables(null, null, "%", null);
                        while (rs.next()) 
                        { 
                            String tbl = rs.getString(3);
                            System.out.print(tbl + "\r\n");
                            ResultSet ct = null;
                            ct = conn.createStatement().executeQuery("SELECT COUNT(*) FROM" + tbl);

                            while (ct.next())
                             {
                                 System.out.print(ct.getString(1) + "\r\n");
                                 data.append("Table \"" + rs.getString(3) + "\" contains " + ct.getString(1) + " records.\r\n");
                             }

                        }

                    data.append("\r\n");

                }
             catch(Exception err)
                 {
                     System.out.print(err + "\r\n");
                 }

             try
                 {
                     ResultSet ct = null;
                     ct = conn.createStatement().executeQuery("SELECT COUNT(*) FROM customer");
                     while (ct.next())
                     {
                         data.append(ct.getString(1) + "\r\n");
                     }

                     ResultSet pt = null;
                     pt = conn.createStatement().executeQuery("SELECT COUNT(*) FROM product");
                     while (pt.next())
                     {
                         data.append(pt.getString(1) + "\r\n");
                     }

                 }

             catch(Exception err)
                 {
                     System.out.print(err + "\r\n");
                 }

【问题讨论】:

    标签: java mysql netbeans


    【解决方案1】:

    通过以下查询,您可以查询特定数据库上包含行数、日期大小、索引大小等的所有表。

    SELECT concat(table_schema,'.',table_name) tables,
    concat(round(table_rows),'') rows,
    concat(round(data_length/(1024),2),'') data_size,
    concat(round(index_length/(1024),2),'') index_size,
    concat(round((data_length+index_length)/(1024),2),'') total_size,
    round(index_length/data_length,2) index_data_ratio
    FROM information_schema.TABLES
    WHERE table_schema like "%YOUR-DATABASE-NAME-HERE%"
    ORDER BY rows DESC LIMIT 20;
    

    【讨论】:

      【解决方案2】:

      这就是我最终所做的,它完全按照我的意愿工作。我最终在 while 循环中使用了一个准备好的语句来使其工作。

      connect();
      
                   try
                      {     
                          String db = conn.getCatalog();
                          data.append("The current database " + db + " contains the following tables:\r\n");
                      }
                   catch(Exception err)
                      {
                          System.out.print(err + "\r\n");
                      }         
      
                   try
                      {
                          ResultSet rs = null;
                          DatabaseMetaData md = conn.getMetaData();
                          rs = md.getTables(null, null, "%", null);
      
                          while (rs.next()) 
                              { 
                                  String tbl = rs.getString(3);
                                  String query = ("SELECT COUNT(*) FROM " + tbl);   
                                  PreparedStatement cnt = conn.prepareStatement(query);                         
                                  ResultSet ct = cnt.executeQuery();
                                  while (ct.next())
                                  {
                                      data.append("Table " + rs.getString(3) + " has " + ct.getString(1) + " records\r\n");
                                  }  
                              }
      
                          data.append("\r\n");
                      }
      
                   catch(Exception err)
                      {
                          System.out.print(err + "\r\n");
                      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-29
        • 2016-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-30
        • 2011-02-12
        相关资源
        最近更新 更多