package com.megatim.fdxcommons.tools.database.queries;
|
|
import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
|
import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
|
import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
|
import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
|
import java.sql.Connection;
|
import java.sql.PreparedStatement;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
*
|
* @author Gabuntu
|
*/
|
public class UpdateQuery implements QueryMetaData<Void> {
|
|
private final Connection connection;
|
private final QueryCriterion queryCriterion;
|
private final String tableName;
|
private final List<String> columnNames;
|
private final List<QueryParam> params;
|
|
public UpdateQuery(Connection connection, QueryCriterion queryCriterion, String tableName, List<String> columnNames, List<QueryParam> params) {
|
this.connection = connection;
|
this.queryCriterion = queryCriterion;
|
this.tableName = tableName;
|
this.columnNames = columnNames;
|
this.params = params;
|
}
|
|
@Override
|
public Void execute() throws Exception {
|
|
System.out.println("<----------------------------------------------------------------------------------------------------------->");
|
System.out.println(updateQuery());
|
System.out.println("<----------------------------------------------------------------------------------------------------------->");
|
|
try ( PreparedStatement statement = connection.prepareStatement(updateQuery())) {
|
new DefaultPreparedStatementProcessor().process(statement, params);
|
statement.execute();
|
}
|
|
return null;
|
}
|
|
private String updateQuery() throws Exception {
|
return "UPDATE " + tableName + " " + setQueryPart() + " " + new WhereQueryString(queryCriterion).query();
|
}
|
|
private String setQueryPart() throws Exception {
|
|
List<String> columnsToUpdate = new ArrayList<>(columnNames);
|
|
StringBuilder query = new StringBuilder("SET ");
|
int index = 0;
|
|
for (String column : columnsToUpdate) {
|
if ((index + 1) < columnsToUpdate.size()) {
|
query.append(column).append(" = ? ,");
|
} else {
|
query.append(column).append(" = ?");
|
}
|
index++;
|
}
|
return query.toString();
|
}
|
|
}
|