package hip.ch5.db; import hip.ch3.StockPriceWritable; import org.apache.hadoop.io.Writable; import org.apache.hadoop.mapred.lib.db.DBWritable; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.text.ParseException; import java.text.SimpleDateFormat; public class StockDbWritable extends StockPriceWritable implements Writable, DBWritable { private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); public static String [] fields = { "symbol", "quote_date" , "open_price", "high_price", "low_price", "close_price", "volume", "adj_close_price"}; @Override public void readFields(ResultSet resultSet) throws SQLException { int idx=2; setSymbol(resultSet.getString(idx++)); setDate(sdf.format(resultSet.getDate(idx++))); setOpen(resultSet.getDouble(idx++)); setHigh(resultSet.getDouble(idx++)); setLow(resultSet.getDouble(idx++)); setClose(resultSet.getDouble(idx++)); setVolume(resultSet.getInt(idx++)); setAdjClose(resultSet.getDouble(idx)); } @Override public void write(PreparedStatement statement) throws SQLException { int idx=1; statement.setString(idx++, getSymbol()); try { statement.setDate(idx++, new Date(sdf.parse(getDate()).getTime())); } catch (ParseException e) { throw new SQLException("Failed to convert String to date", e); } statement.setDouble(idx++, getOpen()); statement.setDouble(idx++, getHigh()); statement.setDouble(idx++, getLow()); statement.setDouble(idx++, getClose()); statement.setInt(idx++, getVolume()); statement.setDouble(idx, getAdjClose()); } }