Author: [log in to unmask] Date: Tue Nov 25 01:51:52 2014 New Revision: 1582 Log: Add a method to build a SQL string for a prepared insert statement from a ConditionsObject. Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/QueryBuilder.java Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/QueryBuilder.java ============================================================================= --- java/trunk/conditions/src/main/java/org/hps/conditions/database/QueryBuilder.java (original) +++ java/trunk/conditions/src/main/java/org/hps/conditions/database/QueryBuilder.java Tue Nov 25 01:51:52 2014 @@ -4,14 +4,15 @@ import java.util.Date; import java.util.List; +import org.hps.conditions.api.ConditionsObject; import org.hps.conditions.api.FieldValueMap; /** - * This is a static utility class for building SQL queries for the conditions - * system. + * This is a static utility class for building SQL queries for the conditions system. * * @author Jeremy McCormick <[log in to unmask]> */ +// TODO: Most methods should be converted to use prepared statements, which is more flexible. public final class QueryBuilder { private QueryBuilder() { @@ -67,6 +68,28 @@ buff.append(") "); return buff.toString(); } + + public static String buildPreparedInsert(ConditionsObject object) { + if (object.getTableMetaData() == null) { + throw new IllegalArgumentException("The ConditionsObject does not have table meta data."); + } + if (object.getFieldValues().size() == 0) { + throw new IllegalArgumentException("The ConditionsObject has no values set."); + } + StringBuffer buffer = new StringBuffer(); + buffer.append("INSERT INTO " + object.getTableMetaData().getTableName() + "( collection_id, "); + for (String fieldName : object.getFieldValues().keySet()) { + buffer.append(" " + fieldName + ","); + } + buffer.setLength(buffer.length() - 1); + buffer.append(" ) VALUES ( ?,"); + for (Object value : object.getFieldValues().values()) { + buffer.append(" ?,"); + } + buffer.setLength(buffer.length() - 1); + buffer.append(")"); + return buffer.toString(); + } static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss"); @@ -84,9 +107,10 @@ for (Object value : fieldValues.values()) { String insertValue = value.toString(); if (value instanceof Date) { - insertValue = dateFormat.format((Date) value); + buff.append(" STR_TO_DATE( '" + dateFormat.format((Date) value) + "', '%Y-%m-%d %H:%i:%S' ),"); + } else { + buff.append(" '" + insertValue + "',"); } - buff.append(" '" + insertValue + "',"); } buff.setLength(buff.length() - 1); buff.append(")"); @@ -118,4 +142,8 @@ String query = "DELETE FROM " + tableName + " WHERE id = " + rowId; return query; } -} + + public static String formatDate(Date date) { + return dateFormat.format(date); + } +}