Refactor tabular output for eventual re-use printing table metadata.
[squelch.git] / src / main / java / net / jaekl / squelch / stmt / Select.java
1 package net.jaekl.squelch.stmt;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.sql.Connection;
6 import java.sql.PreparedStatement;
7 import java.sql.ResultSet;
8 import java.sql.SQLException;
9 import java.util.Locale;
10
11 public class Select extends Query {
12
13         @Override
14         public boolean handles(String line) {
15                 if (null == line) {
16                         return false;
17                 }
18                 
19                 String s = line.trim().toUpperCase(Locale.CANADA);
20                 return (s.startsWith("SELECT "));
21         }
22
23         @Override
24         public int exec(Connection conn, PrintWriter pw, String line) throws IOException, SQLException 
25         {
26                 int rowCount = 0;
27                 
28                 try (PreparedStatement ps = conn.prepareStatement(line)) 
29                 {
30                         try (ResultSet rs = ps.executeQuery()) 
31                         {
32                                 rowCount = printFormatted(pw, rs);
33                                 
34                         }
35                 }
36                 return rowCount;
37         }
38         
39         private int printFormatted(PrintWriter pw, ResultSet rs) throws IOException, SQLException
40         {
41                 TabularResultSet trs = new TabularResultSet(rs);
42                 int rowCount = trs.printTable(pw);
43                 pw.flush();
44                 
45                 return rowCount;
46         }
47 }