今天来分享一个大家可能会用到的东西,mysql查询结果的处理,当然,这个查询结果的处理指的不是说你业务上怎么处理,而是格式上的处理
目前有很多能够实现数据库交互的框架,很多框架用起来很方便,但,也不是任何时候都能去用一些框架,毕竟框架虽好,也得合适,就像开发语言,没有所谓的最好的开发语言,没有所谓的天下第一,只有合适与不合适,好了扯远了,开始正题
mysql查询结果的处理,对于框架,比如mybatis、mybatisplus、springdataJPA等等,都可以映射成一个实体类对象,我们可以很方便的处理,此处就不做讲解了,但是对于原生的JDBC来说,查询出来的结果可不是一个对象(我说的是原生JDBC,可不是spring整合的JDBC),而是一个 ResultSet
啧,这个ResultSet就是你给的SQL的查询结果了,这个时候如果你没有用过JDBC或者没解析过的就懵逼了,当你尝试去使用它的方法的时候,你会发现,这玩意是个啥,它的方法咋看起来都不像!!!
对,你没看错,你接收到的返回对象也没错,它就是一个ResultSet,这个结果集包含了你查询的所有结果,接下来告诉你怎么转换
想要获取你查询到的数据,你首先得拿到这个数据集对吧,ResultSet没有直接提供给你获取查询数据的方法,但给了你获取数据集的方法 .getMetaData()
获取到结果集之后,你就可以获取查询的条数,查询到的内容,字段名以及字段对应的值!
来,给你一份我之前写的共用方法,可以把ResultSet转换为Listt<Map>,我保证,你一看就懂
/*
* ResultSet----->Map
* */
public List<Map> ResultSetToMap(ResultSet resultSet) throws SQLException {
List<Map> list = new ArrayList<>();
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
while (resultSet.next()) {
Map<String, Object> jsonMap = new HashMap<>();
for (int i = 1; i <= columnCount; i++) {
String columnTypeName = metaData.getColumnTypeName(i);
String columnName = metaData.getColumnName(i);
if ("INT".equals(columnTypeName)) {
int anInt = resultSet.getInt(columnName);
jsonMap.put(columnName, anInt);
} else {
String s = resultSet.getString(columnName);
jsonMap.put(columnName, s);
}
}
list.add(jsonMap);
}
return list;
}
是不是一看就懂,就是去遍历这个结果集,拿到字段名,根据字段名去拿值,最后收集起来,这里我对 int 类型做了处理,让他作为int取出,其他的类型我统一按照String处理了,当然,这个都可以处理,随你,看你的需要,总体的意思就是,你去遍历它,去取结果,就完事啦~