package com.lingbobu.flashdb.transfer.sqlfunc;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;
import javax.sql.DataSource;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import com.lingbobu.flashdb.transfer.impl.InputDbQuery;
public class DbQuery implements BeanFactoryAware {
private BeanFactory beanFactory;
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
public InputDbQuery call(String dataSourceBean, String dataSourceSql) {
DataSource dataSource = beanFactory.getBean(dataSourceBean, DataSource.class);
return new InputDbQuery(dataSource, dataSourceSql, new Object[0]);
}
public InputDbQuery call(String dataSourceBean, String dataSourceSql, Object dataSourceSqlParams1) {
DataSource dataSource = beanFactory.getBean(dataSourceBean, DataSource.class);
return new InputDbQuery(dataSource, dataSourceSql, new Object[]{dataSourceSqlParams1});
}
public InputDbQuery call(String dataSourceBean, String dataSourceSql, Object dataSourceSqlParams1, Object dataSourceSqlParams2) {
DataSource dataSource = beanFactory.getBean(dataSourceBean, DataSource.class);
return new InputDbQuery(dataSource, dataSourceSql, new Object[]{dataSourceSqlParams1,dataSourceSqlParams2});
}
public Object queryForObject(String dataSourceBean, String sql) {
DataSource dataSource = beanFactory.getBean(dataSourceBean, DataSource.class);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate.queryForObject(sql, Object.class);
}
public Set<Object> queryForSet(String dataSourceBean, String sql) {
DataSource dataSource = beanFactory.getBean(dataSourceBean, DataSource.class);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
final Set<Object> result = new HashSet<Object>();
jdbcTemplate.query(sql, new RowCallbackHandler(){
@Override
public void processRow(ResultSet rs) throws SQLException {
Object value = rs.getObject(1);
if (value == null) return;
result.add(value);
}
});
return result;
}
public void executeSql(String dataSourceBean, String sql) {
DataSource dataSource = beanFactory.getBean(dataSourceBean, DataSource.class);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.execute(sql);
}
public void executeSql(String dataSourceBean, String sql, Object dataSourceSqlParams1) {
DataSource dataSource = beanFactory.getBean(dataSourceBean, DataSource.class);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update(sql, new Object[]{dataSourceSqlParams1});
}
public void executeSql(String dataSourceBean, String sql, Object dataSourceSqlParams1, Object dataSourceSqlParams2) {
DataSource dataSource = beanFactory.getBean(dataSourceBean, DataSource.class);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update(sql, new Object[]{dataSourceSqlParams1,dataSourceSqlParams2});
}
}