- 使用JdbcTemplate需要的jar包,使用Spring的JDBCTemplate的时候先要把jar拿过来:
- JdbcTemplate工具类如下:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.core.StatementCallback;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.springframework.stereotype.Repository;
import com.bsr.app.Dao.JdbcDao;
@Repository
public class JdbcDaoImpl implements JdbcDao{
Logger log = Logger.getLogger(this.getClass());
@Autowired
JdbcTemplate jdbcTemplate;
@Override
public void execute(final String sql){
jdbcTemplate.execute(sql);
}
@Override
public int delete(String sql) {
return jdbcTemplate.update(sql);
}
@Override
public int add(String sql) {
final String sqlSave = sql.toString();
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement ps = con.prepareStatement(sqlSave, Statement.RETURN_GENERATED_KEYS);
return ps;
}
}, keyHolder);
int code = keyHolder.getKey().intValue();
return code;
}
@Override
public int update(String sql) {
return jdbcTemplate.update(sql);
}
@Override
public int[] batchUpdate(String[] sql) {
return jdbcTemplate.batchUpdate(sql);
}
@Override
public List<?> queryForList(String sql) {
return jdbcTemplate.queryForList(sql);
}
@Override
public <T> List<T> queryForList(String sql, Class<T> elementType) {
return jdbcTemplate.queryForList(sql, elementType);
}
@Override
public SqlRowSet queryForRowSet(String sql) {
return jdbcTemplate.queryForRowSet(sql);
}
@Override
public int queryForInt(String sql) {
int re_int = 0;
try {
re_int = jdbcTemplate.queryForInt(sql);
} catch (EmptyResultDataAccessException e) {
re_int = 0;
} catch (IncorrectResultSizeDataAccessException e) {
re_int = -1;
}
return re_int;
}
@Override
public long queryForLong(String sql) {
long re_int = 0;
try {
re_int = jdbcTemplate.queryForLong(sql);
} catch (EmptyResultDataAccessException e) {
log.info("find empty result!");
re_int = 0;
} catch (IncorrectResultSizeDataAccessException e) {
log.info("find too many result!");
re_int = -1;
}
return re_int;
}
@SuppressWarnings("rawtypes")
@Override
public Map queryForMap(String sql) {
try {
return jdbcTemplate.queryForMap(sql);
} catch (EmptyResultDataAccessException e) {
log.info("find empty result!");
return new HashMap();
} catch (IncorrectResultSizeDataAccessException e) {
log.info("find too many result!");
return new HashMap();
}
}
@Override
public Object queryForObject(String sql, Class<?> requiredType) {
return jdbcTemplate.queryForObject(sql, requiredType);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public int getCount(String sql) {
return jdbcTemplate.query(sql, new ResultSetExtractor(){
@Override
public Integer extractData(ResultSet rs)
throws SQLException, DataAccessException {
if(rs.next()){
return Integer.parseInt(rs.getString(1));
}else{
return 0;
}
}});
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public List<HashMap<String, String>> getData(final String sql)
{
return jdbcTemplate.execute(new StatementCallback(){
@Override
public List doInStatement(Statement statement)
throws SQLException, DataAccessException {
List<HashMap<String,String>> result = new ArrayList<HashMap<String,String>>();
ResultSet rs = statement.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
while(rs.next())
{
HashMap<String,String> map = new HashMap<String,String>();
for(int i=0;i<rsmd.getColumnCount();i++)
{
map.put(rsmd.getColumnLabel(i+1), rs.getString(i+1));
}
result.add(map);
}
return result;
}
});
}
}