当数据库返回的数据为多行结果集时,可以使用 List<Map<String, Object>>
来接收。其中,List
表示结果集的行,而每一行都用一个 Map
对象来表示,Map
的键是列名,值是对应的数据。
以下是一个示例代码,展示如何使用 Map
接收数据库返回的数据:
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DatabaseExample {
public static void main(String[] args) {
// 连接数据库,执行查询语句
try {
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM mytable");
// 将结果集转换为 List<Map<String, Object>>
List<Map<String, Object>> dataList = new ArrayList<>();
while (resultSet.next()) {
Map<String, Object> row = new HashMap<>();
// 获取每列的值,并按列名存储到 Map 中
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnName(i);
Object columnValue = resultSet.getObject(i);
row.put(columnName, columnValue);
}
dataList.add(row);
}
// 打印结果
for (Map<String, Object> row : dataList) {
for (Map.Entry<String, Object> entry : row.entrySet()) {
String columnName = entry.getKey();
Object columnValue = entry.getValue();
System.out.println(columnName + ": " + columnValue);
}
System.out.println("---");
}
// 关闭连接和资源
resultSet.close();
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
以上代码示例使用 JDBC
连接数据库,并执行一个查询语句。然后将结果集中的每一行数据转换为 Map
,并存储在 List<Map<String, Object>>
中。最后,通过遍历 dataList 来打印结果。
在上述示例中,每个 Map<String, Object>
对象表示数据库结果集中的一行数据。每个 Map
的键是列名,值是对应的数据。
这意味着每个 Map 对象存储的是一行数据的信息,而不是相同的数据。
例如,如果查询结果有两行数据,每行有两个列(“name” 和 “age”),则使用 List<Map<String, Object>>
存储结果集会得到如下结构:
[
{"name": "John", "age": 25},
{"name": "Jane", "age": 30}
]
这里,第一个 Map 表示第一行数据,其中键 “name” 对应值 “John”,键 “age” 对应值 25。第二个 Map 表示第二行数据,其中键 “name” 对应值 “Jane”,键 “age” 对应值 30。
每个 Map
都是独立的,存储不同的数据行的信息。