近期在讲商城类项目,因为经常用到查询,所以写了个通用查询代码,以供大家参考,上代码:
/**
* 通用查询
* @param sql 要执行的sql语句
* @param params sql中的?
* @return 包含多行记录(Map)的列表
*/
public static List<Map<String,Object>> query(String sql,Object[] params){
List<Map<String,Object>> resList = new ArrayList<Map<String,Object>>();
//获取连接
Connection conn = getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
try {
//获取ps对象
ps = conn.prepareStatement(sql);
//给?设值
if(params!=null)
{
for(int i=0;i<params.length;i++)
{
ps.setObject((i+1), params[i]);
}
}
//执行sql语句
rs = ps.executeQuery();
//获取字段数
int count = rs.getMetaData().getColumnCount();
//遍历查询结果集合
while(rs.next())
{
//定义map存储字段名和对应数据
Map<String,Object> map = new HashMap<String, Object>();
//根据字段数循环录入一行数据
for(int i=1;i<=count;i++)
{
map.put(rs.getMetaData().getColumnName(i), rs.getObject(i));
}
//将存储一行数据的map存至list
resList.add(map);
}
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally{
closeAll(conn, ps, rs);
}
return resList;
}
以上是通用查询代码,其中获取连接和释放资源方法比较简单,未给出。查询方法返回的数据示例代码如下:
String sql = "Select * from users";
List<Map<String,Object>> resList = DBUtil.query(sql, null);
for(Map map:resList)
{
System.out.print("姓名:"+map.get("u_name")+"\t\t");
System.out.println("地址:"+map.get("u_adress"));
}
运行结果如图所示: