Refactor tabular output for eventual re-use printing table metadata.
[squelch.git] / src / main / java / net / jaekl / squelch / stmt / Select.java
index 088181a50662c1015d0f1a936a29730e2bbfe531..afad262856bfec4d0c834951fa778c7573cbe1b1 100644 (file)
@@ -5,12 +5,9 @@ import java.io.PrintWriter;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.util.Locale;
 
-import net.jaekl.squelch.sql.Column;
-
 public class Select extends Query {
 
        @Override
@@ -38,57 +35,13 @@ public class Select extends Query {
                }
                return rowCount;
        }
-
-       private Column[] getColumns(ResultSetMetaData metaData) 
-                       throws SQLException, ClassNotFoundException 
-       {
-               int colCount = metaData.getColumnCount();
-               
-               Column cols[] = new Column[colCount];
-               for (int idx = 1; idx <= colCount; ++idx) {
-                       String label = metaData.getColumnLabel(idx);
-                       Class<?> clazz = Class.forName(metaData.getColumnTypeName(idx));
-                       int width = metaData.getColumnDisplaySize(idx);
-                       cols[idx] = new Column(label, clazz, width);
-               }
-               
-               return cols;
-       }
-
+       
        private int printFormatted(PrintWriter pw, ResultSet rs) throws IOException, SQLException
        {
-               try {
-                       ResultSetMetaData metaData = rs.getMetaData();
-                       int rowCount = 0;
-                       Column[] cols = getColumns(metaData);
-                       StringBuilder sb = new StringBuilder();
-                       sb.append("----------------------------------\n");
-                       for (int idx = 1; idx <= cols.length; ++idx) {
-                               sb.append("|" + cols[idx - 1].getLabel());
-                       }
-                       sb.append("|\n");
-                       String header = sb.toString();
-                       
-                       while (rs.next()) {
-                               if (null != header) {
-                                       pw.print(header);
-                                       header = null;
-                               }
-                               
-                               for (int idx = 1; idx <= cols.length; ++idx) {
-                                       pw.print("|" + rs.getObject(idx));
-                               }
-                               pw.println("|");
-                       }
-                       if (rowCount > 0) {
-                               pw.println("----------------------------------");
-                       }
-                       pw.println("" + rowCount + " row(s) returned.");
-                       
-                       return rowCount;
-               }
-               catch (ClassNotFoundException exc) {
-                       throw new SQLException(exc);
-               }
+               TabularResultSet trs = new TabularResultSet(rs);
+               int rowCount = trs.printTable(pw);
+               pw.flush();
+               
+               return rowCount;
        }
 }