package ddth.dasp.framework.logging.db; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import ddth.dasp.common.logging.ILogWriter; import ddth.dasp.framework.dbc.IJdbcFactory; /** * This implementation of {@link ILogWriter} writes log to database table using * JDBC. * * @author NBThanh <btnguyen2k@gmail.com> */ public abstract class JdbcLogWriter implements ILogWriter { private IJdbcFactory jdbcFactory; // private JdbcTemplate jdbcTemplate; private String dbDriver, dbConnUrl, dbUsername, dbPassword; /** * Initializing method. */ public void init() { // DataSource ds = jdbcFactory.getDataSource(dbDriver, dbConnUrl, // dbUsername, dbPassword); // jdbcTemplate = new JdbcTemplate(ds); } /** * Destruction method. */ public void destroy() { // EMPTY } protected IJdbcFactory getJdbcFactory() { return jdbcFactory; } public void setJdbcFactory(IJdbcFactory jdbcFactory) { this.jdbcFactory = jdbcFactory; } // protected JdbcTemplate getJdbcTemplate() { // return jdbcTemplate; // } public void setDbDriver(String dbDriver) { this.dbDriver = dbDriver; } public void setDbConnUrl(String dbConnUrl) { this.dbConnUrl = dbConnUrl; } public void setDbUsername(String dbUsername) { this.dbUsername = dbUsername; } public void setDbPassword(String dbPassword) { this.dbPassword = dbPassword; } /** * Gets a DB connection. * * @return String * @throws SQLException */ protected Connection getConnection() throws SQLException { return jdbcFactory.getConnection(dbDriver, dbConnUrl, dbUsername, dbPassword); } /** * Writes log to the specified database table. * * @param dbTable * String name of the database table * @param logData * Map the log data to be written * @throws SQLException */ protected void writeLog(String dbTable, Map<String, Object> logData) throws SQLException { if (logData == null || logData.size() == 0) { return; } StringBuilder sql = new StringBuilder("INSERT INTO "); sql.append(dbTable); sql.append("("); List<Object> values = new ArrayList<Object>(logData.size()); for (Entry<String, Object> entry : logData.entrySet()) { String column = entry.getKey(); Object value = entry.getValue(); sql.append(column).append(","); values.add(value); } sql.delete(sql.length() - 1, sql.length()); sql.append(")VALUES("); sql.append("?,"); sql.delete(sql.length() - 1, sql.length()); sql.append(")"); // jdbcTemplate.update(sql.toString(), values.toArray()); } }