<span style="font-size:12px;">import java.math.BigDecimal;
import java.sql.Clob;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @描述:利用jdbc进行常见的查询
* @author richersky
* @日期:2010-06-27
*/
public class EntityDaoImplJdbc {
private String datasourse;
/**
* 根据sql语句查询数据
* @param sql
* @param page
* @return
* @throws Exception
*/
public Page findSql(String sql, Page page) throws Exception{
JdbcUtil jdbcUtil = null;
try {
StringBuffer ssql = new StringBuffer();
ssql.append(sql);
//获取条件对应的值集合
List valueList = page.getValues();
LogUtil.infoSql(EntityDaoImplJdbc.class,valueList,"SQL语句:",ssql.toString());
jdbcUtil = new JdbcUtil(datasourse);
PreparedStatement preparedStatement = jdbcUtil.createPreparedStatement(ssql.toString());
int liSQLParamIndex = 1;
if(valueList!=null){
for(int i=0;i<valueList.size();i++){
Object obj = valueList.get(i);
this.setParameterValue(preparedStatement, i+1, obj);
liSQLParamIndex++;
}
}
ResultSet rs = preparedStatement.executeQuery();
List<Map<String,Object>> dataList = new ArrayList<Map<String,Object>>();
Map<String,Integer> metaDataMap = null;
while(rs.next()){
if(rs.isFirst()){
metaDataMap = this.getMetaData(rs);
}
dataList.add(this.setData(rs,metaDataMap));
}
page.setDataList(dataList);
}catch (Exception e) {
LogUtil.error(this.getClass(), e,"利用jdbc进行查询时出错!");
throw e;
}finally{
if(jdbcUtil!=null){
jdbcUtil.freeCon();
}
}
return page;
}
/**
* 根据sql查询出单条记录
* @param sql
* @return Map<String,Object>
* @throws Exception
*/
public Map<String,Object> findUniqueBySql(String sql,List<Object> valueList) throws Exception{
JdbcUtil jdbcUtil = null;
Map<String,Object> map = null;
try {
LogUtil.infoSql(EntityDaoImplJdbc.class,valueList,"SQL语句:",sql);
jdbcUtil = new JdbcUtil(datasourse);
PreparedStatement preparedStatement= jdbcUtil.createPreparedStatement(sql);
if(valueList!=null){
for(int i=0;i<valueList.size();i++){
Object obj = valueList.get(i);
this.setParameterValue(preparedStatement, i+1, obj);
}
}
ResultSet rs = preparedStatement.executeQuery();
Map<String,Integer> metaDataMap = null;
if(rs.next()){
metaDataMap = this.getMetaData(rs);
map = this.setData(rs,metaDataMap);
}
}catch (Exception e) {
LogUtil.error(this.getClass(), e,"利用jdbc进行查询时出错!");
throw e;
}finally{
if(jdbcUtil!=null){
jdbcUtil.freeCon();
}
}
return map;
}
/**
* 设置PreparedStatement预处理sql语句的值
* @param pStatement
* @param piIndex
* @param pValueObject
* @throws Exception
*/
private void setParameterValue(PreparedStatement pStatement, int piIndex,Object pValueObject) throws Exception {
if (pValueObject instanceof String) {
pStatement.setString(piIndex, (String) pValueObject);
} else if (pValueObject instanceof Boolean) {
pStatement.setBoolean(piIndex, ((Boolean) pValueObject).booleanValue());
} else if (pValueObject instanceof Byte) {
pStatement.setByte(piIndex, ((Byte) pValueObject).byteValue());
} else if (pValueObject instanceof Short) {
pStatement.setShort(piIndex, ((Short) pValueObject).shortValue());
} else if (pValueObject instanceof Integer) {
pStatement.setInt(piIndex, ((Integer) pValueObject).intValue());
} else if (pValueObject instanceof Long) {
pStatement.setLong(piIndex, ((Long) pValueObject).longValue());
} else if (pValueObject instanceof Float) {
pStatement.setFloat(piIndex, ((Float) pValueObject).floatValue());
} else if (pValueObject instanceof Double) {
pStatement.setDouble(piIndex, ((Double) pValueObject).doubleValue());
} else if (pValueObject instanceof BigDecimal) {
pStatement.setBigDecimal(piIndex, (BigDecimal) pValueObject);
} else if (pValueObject instanceof Date) {
pStatement.setDate(piIndex, (Date) pValueObject);
} else if (pValueObject instanceof Time) {
pStatement.setTime(piIndex, (Time) pValueObject);
} else if (pValueObject instanceof Timestamp) {
pStatement.setTimestamp(piIndex, (Timestamp) pValueObject);
} else {
pStatement.setObject(piIndex, pValueObject);
}
}
/**
* 根据传入的结果集返回结果集的元数据,以列名为键以列类型为值的map对象
* @param rs
* @return
* @throws SQLException
*/
private Map<String,Integer> getMetaData(ResultSet rs) throws SQLException{
Map<String,Integer> map = new HashMap<String,Integer>();
ResultSetMetaData metaData = rs.getMetaData();
int numberOfColumns = metaData.getColumnCount();
for(int column = 0; column < numberOfColumns; column++) {
String columnName = metaData.getColumnLabel(column+1);
int colunmType = metaData.getColumnType(column+1);
columnName = columnName.toLowerCase();
map.put(columnName, colunmType);
}
return map;
}
/**
* 将结果集封装为以列名存储的map对象
* @param rs
* @param metaDataMap元数据集合
* @return
* @throws Exception
*/
private Map<String,Object> setData(ResultSet rs,Map<String,Integer> metaDataMap) throws Exception {
Map<String,Object> map = new HashMap<String,Object>();
for (String columnName : metaDataMap.keySet()) {
int columnType = metaDataMap.get(columnName);
Object object = rs.getObject(columnName);
if(object==null){
map.put(columnName, null);
continue;
}
//以下并为对所有的数据类型做处理,未特殊处理的数据类型将以object的形式存储。
switch (columnType) {
case java.sql.Types.VARCHAR:
map.put(columnName, object);
break;
case java.sql.Types.DATE:
map.put(columnName, DateUtil.format(object.toString()));
break;
case java.sql.Types.TIMESTAMP:
map.put(columnName, DateUtil.format(object.toString()));
break;
case java.sql.Types.TIME:
map.put(columnName, DateUtil.format(object.toString()));
break;
case java.sql.Types.CLOB:
try{
if(object!=null){
Clob clob = (Clob)object;
long length = clob.length();
map.put(columnName, clob.getSubString(1L, (int)length));
}
}catch(Exception e){
LogUtil.error(this.getClass(), e,"将字段值从clob转换为字符串时出错@!");
}
break;
case java.sql.Types.BLOB:
map.put(columnName, "");
break;
default:
map.put(columnName, object);
break;
}
}
return map;
}
} </span>
其他实例:
http://www.cnblogs.com/shellway/p/3938212.html
JDBC通用查询经典实例(应用)
最新推荐文章于 2023-09-07 19:06:47 发布