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 }