1 package ca.spaz.sql;
2
3 import java.sql.*;
4
5 /***
6 * Base class for SQL command generators
7 *
8 * @author davidson
9 */
10 public abstract class SQLStatement {
11
12 public final void execute(Connection con) throws SQLException {
13 if (!isExecuteSupported()) {
14 throw new UnsupportedOperationException("Execute not supported on "
15 + getClass().getName());
16 }
17 doExecute(con);
18 }
19
20 protected void doExecute(Connection con) throws SQLException { }
21
22 public final boolean isExecuteSupported() {
23 return executeSupport;
24 }
25
26 public final ResultSet executeQuery(Connection con) throws SQLException {
27 if (!isQuerySupported()) {
28 throw new UnsupportedOperationException("Query not supported on "
29 + getClass().getName());
30 }
31 return doExecuteQuery(con);
32 }
33
34 protected ResultSet doExecuteQuery(Connection con) throws SQLException {
35 return null;
36 }
37
38 public final boolean isQuerySupported() {
39 return querySupport;
40 }
41
42 protected String table;
43
44 private boolean querySupport;
45
46 private boolean executeSupport;
47
48 protected SQLStatement(String table, boolean querySupport,
49 boolean executeSupport) {
50 this.table = table;
51 this.querySupport = querySupport;
52 this.executeSupport = executeSupport;
53 }
54
55 public String getTableName() {
56 return table;
57 }
58
59 static String escape(String s) {
60 return s.replaceAll("//'", "//'//'");
61 }
62
63 protected abstract String getQueryString();
64
65 public String toString() {
66 return getQueryString();
67 }
68
69 /***
70 * Ensure that correct classes (with respect to toString()) ge
71 * passed on
72 * @param o the class to check.
73 * @return a valid class for SQL
74 */
75 static Object fixClass(Object o) {
76 if (o instanceof java.util.Date) {
77 o = new java.sql.Date(((java.util.Date)o).getTime());
78 }
79 return o;
80 }
81
82
83 }