?最近由于项目需求,开发都是偏报表种类多,而且考虑到项目移植性,感觉还是用jdbc访问比较稳妥,等到项目移植的时候只需要修改相应的sql,以下是最近刚封装的jdbc,主要是通过重构封装增删改查,向外提供包括查询分页,模糊查询的方式,只需要把需要的参数封装成hashmap即可,请大家给点意见,
?
package com.micon.base.dao;
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.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.ObjectUtils;
import com.micon.base.bean.Page;
import com.micon.base.bean.ParamMap;
import com.micon.base.bean.QueryBean;
public class JdbcUtils {
private static JdbcUtils jdbcUtils = null;
public static JdbcUtils getJdbcUtils() {
if (jdbcUtils == null) {
jdbcUtils = new JdbcUtils();
}
return jdbcUtils;
}
public Connection getConnection() throws ClassNotFoundException,
SQLException {
Connection con = DataBase.getConnection();
return con;
}
public int insert(String tableName, Map paramMap) throws Exception {
String sql = genInsertSql(tableName, paramMap);
//delete tab where id = ?, name = ?
List param = new ArrayList();
if (null != paramMap && !paramMap.isEmpty()) {
Set set = paramMap.entrySet();
for (Iterator it = set.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
String key = ObjectUtils.toString(entry.getKey()).trim()
.toLowerCase();
if (null != key && !"".equals(key)) {
param.add(entry.getValue());
}
}
}
return updateData(sql, param);
}
public int update(String tableName, Map paramMap) {
return update(tableName,"id",paramMap);
}
public int update(String tableName, String primaryKey, Map paramMap) {
String sql = genUpdateSql(tableName, primaryKey, paramMap);
List param = new ArrayList();
if (null != paramMap && !paramMap.isEmpty()) {
Set set = paramMap.entrySet();
String primary = "";
for (Iterator it = set.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
String key = ObjectUtils.toString(entry.getKey()).trim()
.toLowerCase();
if (null != key && !"".equals(key)) {
if (null != entry.getValue()) {
if (key.equals(primaryKey)) {
primary = ObjectUtils.toString(entry.getValue())
.trim();
} else {
param.add(entry.getValue());
}
}
}
}
if (null != primary && !"".equals(primary)) {
param.add(primary);
try {
return updateData(sql, param);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return 0;
}
public int delete(String tableName, String filter) throws Exception {
StringBuffer sql = new StringBuffer(" delete from " + tableName + " ");
if (filter != null && !filter.equals("")) {
sql.append(" where " + filter);
}
return updateData(sql.toString(), null);
}
public int updateData(String sql) throws Exception {
return updateData(sql,null);
}
public int updateData(String sql, List param) throws Exception {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = getConnection();
ps = conn.prepareStatement(sql);
if (param != null && param.size() > 0){
for (int i = 0; i < param.size(); i++) {
ps.setObject(i + 1, param.get(i));
}
}
System.out.println(com.micon.base.util.DateUtils.DATEFORMAT_yMd_hms.format(new Date())
+" the update sql = [ " + sql+" ]");
return ps.executeUpdate();
} catch (SQLException ex) {
System.out.println("Cannot execute sql: " + sql + "\nvalues:"
+ param + " error: " + ex.getMessage());
throw new Exception("Cannot execute sql: " + sql + "\nvalues:"
+ param + " error: " + 