package com.ehi.stateExchangeFL.util.db;
import static org.apache.commons.lang.StringUtils.join;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.ehi.base.core.EHIDate;
/**
*
* @author candicew
*
*/
public class SqlStringUtil {
/**
* it will return a sql such as
* "insert into some_table (c1, c2 ...) values (?, ? ...) ", and the
* parameters
*
* @param tableName
* @param columnValues
* @return
*/
public static SqlAndParam getInsertSql(String tableName, Map<String, Object> columnValues) {
String sqlPattern = " insert into {0} ({1}) values ({2}) ";
List<String> questionMarks = new ArrayList<String>();
List<String> columnNames = new ArrayList<String>();
List<Object> params = new ArrayList<Object>();
for (Map.Entry<String, Object> entry : columnValues.entrySet()) {
columnNames.add(entry.getKey());
if (entry.getValue() instanceof EHIDate) {
questionMarks.add("to_date(?,'mm/dd/yyyy')");
params.add(entry.getValue().toString());
} else {
questionMarks.add("?");
params.add(entry.getValue());
}
}
return new SqlAndParam(MessageFormat.format(sqlPattern, tableName, comma(columnNames), comma(questionMarks)), params);
}
private static String comma(List<String> strings) {
return join(strings, ",");
}
public static SqlAndParam getUpdateSql(String tableName, Map<String, Object> nameValuePairs) {
String sqlPattern = "update {0} set {1} ";
/* sth. like "column_name = ?" */
List<String> equations = new ArrayList<String>();
List<Object> params = new ArrayList<Object>();
for (Map.Entry<String, Object> nameValue : nameValuePairs.entrySet()) {
String columnName = nameValue.getKey();
Object value = nameValue.getValue();
if (value instanceof EHIDate) {
equations.add(" " + columnName + " = to_date(?, 'MM-DD-YYYY HH24:MI:SS') ");
params.add(value.toString());
} else {
equations.add(" " + columnName + " = ? ");
params.add(value);
}
}
String sql = MessageFormat.format(sqlPattern, tableName, comma(equations));
SqlAndParam sqlAndParam = new SqlAndParam(sql, params);
return sqlAndParam;
}
}