Java使用MetaData打印MySQL表

时间:2014-02-28 07:53:41

标签: java mysql printing metadata

我如何修改它以便它使用元数据打印表?

public String formatStudentList() throws SQLException 
{ 
    String result = String.format("%-15s %-25s %-25s", "Student ID", "Student Name", "Degree    
      Scheme\n" + String.format("%-15s %-25s %-25s\n", "**********", "" +  
      "********************", "****************************")); 

    int count = 0; 
    try 
    { 
         conn = SimpleDataSource.getConnection(); 
         prepStat = conn.prepareStatement("SELECT * FROM student");
         ResultSet print = prepStat.executeQuery(); 

         while (print.next()) 
         { 
            String id = print.getString("studentId");
            String name = print.getString("studentName"); 
            String degree = print.getString("degreeScheme"); 
            result += String.format("%-15s %-25s %-25s\n", id, name, degree); 
            count++; 
         }

        if (result == null) 
        { 
            result = "No Students Were Found In Database\n";
        } 
        else 
        { 
            result += "\nTotal Number Of Student = " + count; 
        } 
        } catch (SQLException ex) 
        { 
             result = "Error Occurred: " + ex.getMessage(); 
        } finally 
        { 
             conn.close(); 
        } 
        return result; 
}

它完美地完成了我想做的事情,但是使用元数据有一种方法可以自动完成表格间距和标题。任何人都可以帮我改变这个吗?

2 个答案:

答案 0 :(得分:0)

SimpleDataSource.getConnection(),您可以致电getMetaData()获取DatabaseMetaData getMetaData()

然后您可以拨打getColumns

请参阅javadocs

答案 1 :(得分:0)

MetaData不是包含用于打印或显示目的的间距格式的报表。

根据ResultSetMetaData文档:

  

可用于获取有关ResultSet对象中列的类型和属性的信息的对象。

很明显,它没有关于如何用于显示或打印的具体信息。

你的解决方案结合成result字符串进行演示并不好 封装从ResultSet读取的数据以形成数据对象始终是一个好习惯。在您的情况下,它可以是StudentDegreeScheme对象。

使用必要的getter和setter创建一个类,并通过读取ResultSet填充它们并将student...对象返回给调用者。

然后,调用者应在使用(例如)任何HTML布局进行格式化后使用相同的对象进行显示或打印。

希望你明白这一点。