ResultOutputUtil.java :  » Database-DBMS » mckoi » com » mckoi » util » Java Open Source

Java Open Source » Database DBMS » mckoi 
mckoi » com » mckoi » util » ResultOutputUtil.java
/**
 * com.mckoi.util.ResultOutputUtil  22 Sep 2000
 *
 * Mckoi SQL Database ( http://www.mckoi.com/database )
 * Copyright (C) 2000, 2001, 2002  Diehl and Associates, Inc.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * Version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License Version 2 for more details.
 *
 * You should have received a copy of the GNU General Public License
 * Version 2 along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * Change Log:
 * 
 * 
 */

package com.mckoi.util;

import java.sql.*;
import java.io.*;
import java.util.Vector;

/**
 * Utilities for parsing a ResultSet and outputing it in different forms.  The
 * forms included are straight text (mono-spaced), HTML, etc.
 *
 * @author Tobias Downer
 */

public class ResultOutputUtil {


  /**
   * Writes a break.
   *   eg. "+--------+----------+---------------+"
   */
  private static void writeBreak(int[] widths, PrintWriter out) {
    out.print('+');
    for (int i = 0; i < widths.length; ++i) {
      int wid = widths[i] + 2;
      for (int n = 0; n < wid; ++n) {
        out.print('-');
      }
      out.print('+');
    }
    out.println();
  }

  /**
   * Writes a row of data.
   *   eg. "|1         |Greetings        |Part-54445    |"
   */
  private static void writeRow(int[] widths, String[] cols, PrintWriter out) {
    out.print('|');
    for (int i = 0; i < widths.length; ++i) {
      String str = cols[i];
      out.print(' ');
      out.print(str);
      // Write padding
      int wid = (widths[i] + 1) - str.length();
      for (int n = 0; n < wid; ++n) {
        out.print(' ');
      }
      out.print('|');
    }
    out.println();
  }

  /**
   * Formats the ResultSet as plain mono-spaced text and outputs the result to
   * the PrintWriter.
   */
  public static void formatAsText(ResultSet result_set, PrintWriter out)
                                                         throws SQLException {
    ResultSetMetaData meta_data = result_set.getMetaData();
    // Maximum widths of each column.
    int[] max_widths = new int[meta_data.getColumnCount()];
    Vector[] data = new Vector[meta_data.getColumnCount()];
    for (int i = 0; i < data.length; ++i) {
      data[i] = new Vector();
    }
    int row_count = 0;

    for (int i = 0; i < data.length; ++i) {
      String str = meta_data.getColumnLabel(i + 1);
      max_widths[i] = Math.max(str.length(), max_widths[i]);
    }

    // Read in the data for the result set,
    while (result_set.next()) {
      for (int i = 0; i < data.length; ++i) {
        Object ob = result_set.getObject(i + 1);
        String str = "NULL";
        if (ob != null) {
          str = ob.toString();
        }
        data[i].addElement(str);
        max_widths[i] = Math.max(str.length(), max_widths[i]);
      }
      ++row_count;
    }

    // Output the data we stored
    String[] line = new String[data.length];

    writeBreak(max_widths, out);
    for (int n = 0; n < line.length; ++n) {
      line[n] = meta_data.getColumnLabel(n + 1);
    }
    writeRow(max_widths, line, out);
    writeBreak(max_widths, out);
    for (int i = 0; i < row_count; ++i) {
      for (int n = 0; n < line.length; ++n) {
        line[n] = (String) data[n].elementAt(i);
      }
      writeRow(max_widths, line, out);
    }
    writeBreak(max_widths, out);

  }


}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.