/* * UpdateOp.java */ package org.ngbw.sdk.database; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * * @author Paul Hoover * */ class UpdateOp implements RowOperation { // data fields private final String m_tableName; private final Criterion m_key; private final List> m_columns; // constructors /** * * @param tableName * @param key * @param columns */ UpdateOp(String tableName, Criterion key, List> columns) { m_tableName = tableName; m_key = key; m_columns = columns; } /** * * @param tableName * @param key * @param column */ UpdateOp(String tableName, Criterion key, Column column) { m_tableName = tableName; m_key = key; m_columns = new ArrayList>(); m_columns.add(column); } // public methods /** * * @param dbConn * @return * @throws IOException * @throws SQLException */ @Override public void execute(Connection dbConn) throws IOException, SQLException { if (m_columns.isEmpty()) return; StringBuilder stmtBuilder = new StringBuilder(); Iterator> columns = m_columns.iterator(); stmtBuilder.append("UPDATE "); stmtBuilder.append(m_tableName); stmtBuilder.append(" SET "); stmtBuilder.append(columns.next().getName()); stmtBuilder.append(" = ?"); while (columns.hasNext()) { stmtBuilder.append(", "); stmtBuilder.append(columns.next().getName()); stmtBuilder.append(" = ?"); } stmtBuilder.append(" WHERE "); stmtBuilder.append(m_key.getPhrase()); PreparedStatement updateStmt = dbConn.prepareStatement(stmtBuilder.toString()); try { int index = 1; for (columns = m_columns.iterator() ; columns.hasNext() ; index += 1) columns.next().setParameter(updateStmt, index); m_key.setParameter(updateStmt, index); updateStmt.executeUpdate(); } finally { updateStmt.close(); for (Column col : m_columns) col.finishUpdate(); } } }