【问题标题】:Java - Calling super.toString() to format a resultsetJava - 调用 super.toString() 来格式化结果集
【发布时间】:2010-12-19 14:36:57
【问题描述】:

查询我的数据库时,我可以毫无问题地打印我的结果集。我需要使用 super.toString 方法,该方法在我的超类中被覆盖,为我提供我希望结果集显示的格式。

 res = stmt.executeQuery("Select * from registrar.student ");  
 System.out.println("\nAll records in your table:");  
 while (res.next()) {  
     String data = "";  
     data += res.getString("studentID") + "  "  
          + res.getString("firstName") + " "  
          + res.getString("lastName") + " "  
          + res.getDouble("GPA")+ " "  
          + res.getString("status") + " "  
          + res.getString("mentor") +" "  
          + res.getString("level")+"\n";  
     System.out.println(data); 

如何添加super.toString() 来格式化我的数据显示?

【问题讨论】:

    标签: java resultset tostring


    【解决方案1】:

    你不能。你的 super 对你的子类中的数据一无所知,除非你正在格式化的数据位于你的父类中,并在子类中设置。

    但是,由于您的代码显示了作为局部变量创建的 String 对象,因此您的超级用户无法知道该变量的任何信息。

    toString 的目的是输出那个对象的表示,通常表示那个对象的属性。

    【讨论】:

      【解决方案2】:

      你总是可以在你的班级里调用 super.foo()。这会调用超类方法。显然,如果您在课堂外执行此操作,您将无法选择调用哪个 foo() 实现。在这种情况下,您总是调用“最后一个”被覆盖的版本。这称为多态性。

      【讨论】:

        【解决方案3】:

        我试过了

        public static void printRecord(ResultSet rs)
            {
                try {
                    ResultSetMetaData rsmd=rs.getMetaData();
        
                    int totalColumns=rsmd.getColumnCount();
        
                    StringBuilder sb=new StringBuilder();
                    String columnName=null;
        
                    sb.append("[ ");
                    for(int i=1;i<=totalColumns;i++)
                    {
                        columnName=rsmd.getColumnName(i);
        
                        sb.append(columnName);
                        sb.append(":");
                        sb.append(rs.getString(i));
        
                        if(i!=(totalColumns-1))
                        {
                            sb.append(" , ");
                        }
                    }
                    sb.append(" ]");
        
                    System.out.println(sb.toString());
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        
        
            }
        

        【讨论】:

        • 感谢您的回复。你们都在我头上说话。我的变量是在 Super 类中定义的,并由除数据之外的子类继承。
        猜你喜欢
        • 1970-01-01
        • 2019-03-08
        • 1970-01-01
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-16
        • 1970-01-01
        相关资源
        最近更新 更多