View Javadoc

1   package com.diasparsoftware.jdbc;
2   
3   import java.util.*;
4   
5   import org.apache.commons.collections.*;
6   
7   import com.diasparsoftware.java.sql.PreparedStatementData;
8   import com.gargoylesoftware.base.util.StringUtil;
9   
10  public abstract class JdbcQueryBuilder implements PreparedStatementBuilder {
11      public abstract List createPreparedStatementParameters(
12              String statementName, List domainParameters);
13      public abstract String getSqlString(String statementName);
14      public abstract Set getSupportedStatements();
15  
16      public boolean supportsStatement(String statementName) {
17          return getSupportedStatements().contains(statementName);
18      }
19  
20      public PreparedStatementData getPreparedStatementData(String statementName,
21              List domainParameters) {
22  
23          if (supportsStatement(statementName)) {
24  
25              PreparedStatementData preparedStatementData = new PreparedStatementData();
26  
27              preparedStatementData.sqlString = getSqlString(statementName);
28  
29              preparedStatementData.parameters = createPreparedStatementParameters(
30                      statementName, domainParameters);
31  
32              return preparedStatementData;
33          }
34          else {
35              throw new NoSuchElementException("I do not support the statement '"
36                      + statementName + "'");
37          }
38      }
39  
40      public static String createInsertStatement(String tableName,
41              List orderedColumnNames) {
42  
43          String[] markers = new String[orderedColumnNames.size()];
44          Arrays.fill(markers, "?");
45  
46          StringBuffer statementBuffer = new StringBuffer("insert into "
47                  + tableName + " (");
48  
49          statementBuffer.append(StringUtil.join(orderedColumnNames, ", "));
50          statementBuffer.append(") values (");
51          statementBuffer.append(StringUtil.join(markers, ", "));
52          statementBuffer.append(")");
53  
54          return statementBuffer.toString();
55      }
56  
57      public static String createUpdateStatement(String tableName,
58              List orderedColumnNames, String whereClause) {
59          
60          List columnSetClauses = (List) CollectionUtils.collect(
61                  orderedColumnNames, new Transformer() {
62                      public Object transform(Object input) {
63                          String eachColumnName = (String) input;
64                          return eachColumnName + " = ?";
65                      }
66                  });
67  
68          return "update " + tableName + " set "
69                  + StringUtil.join(columnSetClauses, ", ") + " where "
70                  + whereClause;
71      }
72  
73  }