select queries now work, and print tabular output.
[squelch.git] / src / main / java / net / jaekl / squelch / stmt / TabularResultSet.java
1 package net.jaekl.squelch.stmt;
2
3 import java.sql.ResultSet;
4 import java.sql.ResultSetMetaData;
5 import java.sql.SQLException;
6
7 import net.jaekl.squelch.sql.Column;
8 import net.jaekl.squelch.sql.Row;
9
10 public class TabularResultSet extends Tabular {
11         private ResultSet m_resultSet;
12         private Column[] m_cols;
13         
14         public TabularResultSet(ResultSet resultSet) {
15                 m_resultSet = resultSet;
16                 m_cols = null;
17         }
18
19         @Override
20         Column[] getCols() throws SQLException {
21                 ResultSetMetaData metaData = m_resultSet.getMetaData();
22                 int colCount = metaData.getColumnCount();
23                 
24                 Column cols[] = new Column[colCount];
25                 for (int idx = 1; idx <= colCount; ++idx) {
26                         String label = metaData.getColumnLabel(idx);
27                         Class<?> clazz = classForSqlType(metaData.getColumnType(idx));
28                         int width = metaData.getColumnDisplaySize(idx);
29                         cols[idx - 1] = new Column(label, clazz, width);
30                 }
31                 m_cols = cols;
32                 return cols;
33         }
34
35         @Override
36         Row getNext() throws SQLException {
37                 if (null == m_cols) {
38                         m_cols = getCols();
39                 }
40                 if (! m_resultSet.next()) {
41                         return null;
42                 }
43                 
44                 Row row = new Row(m_cols.length);
45                 for (int idx = 0; idx < m_cols.length; ++idx) {
46                         row.setValue(idx + 1, m_resultSet.getObject(idx + 1));
47                 }
48                 
49                 return row;
50         }
51 }