package org.prevayler.demos.scalability.jdbc; import org.prevayler.demos.scalability.*; import java.sql.*; abstract class JDBCScalabilityConnection { protected final Connection connection; private final PreparedStatement insertStatement; protected JDBCScalabilityConnection( Connection connection){ this.connection=connection; try { connection.setAutoCommit(false); } catch ( SQLException sqlx) { dealWithSQLException(sqlx,"setting AutoCommit to false"); } insertStatement=prepare("insert into " + table() + " (ID,NAME,STRING1,BIGDECIMAL1,BIGDECIMAL2,DATE1,DATE2) values(?,?,?,?,?,?,?)"); } protected abstract String table(); protected void insert( Record recordToInsert){ try { insertStatement.setLong(1,recordToInsert.getId()); insertStatement.setString(2,recordToInsert.getName()); insertStatement.setString(3,recordToInsert.getString1()); insertStatement.setBigDecimal(4,recordToInsert.getBigDecimal1()); insertStatement.setBigDecimal(5,recordToInsert.getBigDecimal2()); insertStatement.setDate(6,new java.sql.Date(recordToInsert.getDate1().getTime())); insertStatement.setDate(7,new java.sql.Date(recordToInsert.getDate2().getTime())); insertStatement.execute(); } catch ( SQLException sqlx) { dealWithSQLException(sqlx,"inserting record"); } } protected PreparedStatement prepare( String statement){ try { return connection.prepareStatement(statement); } catch ( SQLException sqlx) { dealWithSQLException(sqlx,"preparing statement: " + statement); return null; } } void replaceAllRecords( int records){ RecordIterator newRecords=new RecordIterator(records); try { connection.createStatement().execute("delete from " + table()); } catch ( SQLException sqlx) { dealWithSQLException(sqlx,"deleting all records from " + table()); } while (newRecords.hasNext()) { insert(newRecords.next()); } try { connection.commit(); } catch ( SQLException sqlx) { dealWithSQLException(sqlx,"commiting insertion of test records"); } } static protected void dealWithSQLException( SQLException sqlx, String duringOperation){ sqlx.printStackTrace(); throw new RuntimeException("SQLException " + duringOperation + "."); } }