//Contributions: Stefan Ortmanns.
package org.prevayler.demos.scalability.jdbc;
import org.prevayler.demos.scalability.*;
import java.sql.*;
class JDBCTransactionConnection extends JDBCScalabilityConnection implements TransactionConnection {
private final PreparedStatement updateStatement;
private final PreparedStatement deleteStatement;
JDBCTransactionConnection(Connection connection) {
super(connection);
updateStatement = prepare("update " + table() + " set NAME=?,STRING1=?,BIGDECIMAL1=?,BIGDECIMAL2=?,DATE1=?,DATE2=? where ID=?");
deleteStatement = prepare("delete from " + table() + " where ID=?");
}
protected String table() {
return "TRANSACTION_TEST";
}
public void performTransaction(Record recordToInsert, Record recordToUpdate, long idToDelete) {
insert(recordToInsert);
update(recordToUpdate);
delete(idToDelete);
try {
connection.commit();
} catch (SQLException sqlx) {
dealWithSQLException(sqlx, "commiting transaction");
}
}
private void update(Record recordToUpdate) {
try {
updateStatement.setString(1,recordToUpdate.getName());
updateStatement.setString(2,recordToUpdate.getString1());
updateStatement.setBigDecimal(3,recordToUpdate.getBigDecimal1());
updateStatement.setBigDecimal(4,recordToUpdate.getBigDecimal2());
updateStatement.setDate(5,new java.sql.Date(recordToUpdate.getDate1().getTime()));
updateStatement.setDate(6,new java.sql.Date(recordToUpdate.getDate2().getTime()));
updateStatement.setLong(7,recordToUpdate.getId()); //"...where ID=?"
updateStatement.execute();
} catch (SQLException sqlx) {
dealWithSQLException(sqlx, "updating record");
}
}
private void delete(long idToDelete) {
try {
deleteStatement.setLong(1,idToDelete);
deleteStatement.execute();
} catch (SQLException sqlx) {
dealWithSQLException(sqlx, "deleting record");
}
}
}