@WebServlet("/ResultSetMetaDataTest")
public class ResultSetMetaDataTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建sql语句
String sql = "select * from user where id<?";
//创建一个数组用来存放sql中?的值
Object obj[] = new Object[]{1020};
//调用test1方法,得到list集合
List<Map<String, Object>> list = test1(sql, obj);
//将list的存到request域中
request.setAttribute("list", list);
//转发到页面
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
private List<Map<String, Object>> test1(String sql, Object[] obj) {
//创建一个Map类型的list集合
List<Map<String,Object>> list = new ArrayList<>();
Connection conn=null;
PreparedStatement ps =null;
ResultSet rs = null;
JDBCUtils utils =JDBCUtils.getInstance();
try {
conn = utils.getConnection();
ps=conn.prepareStatement(sql);
//得到参数元数据
ParameterMetaData pmd = ps.getParameterMetaData();
//得带参数个数
int parameterCount = pmd.getParameterCount();
for(int i=1;i<=parameterCount;i++){
//将数组的元素赋值给对应的问号
ps.setObject(i, obj[i-1]);
}
rs= ps.executeQuery();
//得到结果集元数据
ResultSetMetaData rsmd = rs.getMetaData();
//得到结果集的列的数量
int count = rsmd.getColumnCount();
while(rs.next()){
//创建一个map集合
Map<String,Object> map = new HashMap<>();
//遍历所有的列
for(int i=1;i<=count;i++){
//得到列的名称
String key = rsmd.getColumnName(i);
//得到这个列的值
Object value = rs.getObject(key);
//以键值对的形式存放
map.put(key, value);
}
//将map添加到list集合中
list.add(map);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
utils.free(conn, ps, rs);
}
return list;
}
}
利用结果集元数据将查询对象封装成map
最新推荐文章于 2023-02-17 20:24:57 发布