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 { private final Connection connection; private final QueryCriterion queryCriterion; private final String tableName; private final List columnNames; private final List params; public UpdateQuery(Connection connection, QueryCriterion queryCriterion, String tableName, List columnNames, List 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 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(); } }