应用场景
查询某张表,对于返回的执行结果,咱们并不需要知道他有哪些字段,字段名叫啥,直接通过原生JDBC动态的获取列名以及对应的数据。
其实就有点像遍历map集合,并不需要知道key叫啥,一样可以遍历出来:
java">Map<String,Object> map = Maps.newHashMap();
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
目标
将数据库查询出来的结果,存放到一个List<Map<String, Object>>集合中,方便后续批量将该集合的数据插入到其他地方
整干货
java">private List<Map<String, Object>> executeQuery(String sqlStr,String url,String username,String password) {
Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = null;
ResultSet resultSet = null;
List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
try {
statement = connection.createStatement();
resultSet = statement.executeQuery(sqlStr);
final ResultSetMetaData rsmd = resultSet.getMetaData();
final String[] columnName = new String[rsmd.getColumnCount()];
for (int i = 1; i <= rsmd.getColumnCount(); ++i) {
columnName[i - 1] = rsmd.getColumnLabel(i);
}
while (resultSet.next()) {
LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
for (int j = 1; j <= rsmd.getColumnCount(); ++j) {
if (resultSet.getObject(j) != null && !resultSet.getObject(j).equals("")) {
String columnData = resultSet.getObject(j).toString().trim();
map.put(columnName[j - 1], columnData);
}
else {
map.put(columnName[j - 1], "");
}
}
resultList.add(map);
}
} catch (SQLException e) {
logger.error("SQL语句执行失败",e);
}finally {
if( null != resultSet ) {
resultSet.close();
}
if( null != statement ) {
statement.close();
}
if( null != connection ) {
connection .close();
}
}
return resultList;
}