你可以使用 ResultSetMetaData
接口来获取结果集的元数据,包括列的数量和列的名称。以下是修改后的代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JdbcExample {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
// JDBC连接数据库
String jdbcUrl = "jdbc:mysql://localhost:3306/your_database";
String username = "your_username";
String password = "your_password";
connection = DriverManager.getConnection(jdbcUrl, username, password);
// 准备 SQL 查询语句
String sql = "SELECT * FROM employees";
preparedStatement = connection.prepareStatement(sql);
// 执行查询,获取结果集
resultSet = preparedStatement.executeQuery();
// 获取结果集的元数据
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
// 将 ResultSet 转换为 List<Map<String, Object>>
List<Map<String, Object>> resultList = new ArrayList<>();
while (resultSet.next()) {
Map<String, Object> row = new HashMap<>();
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnName(i);
Object value = resultSet.getObject(i);
row.put(columnName, value);
}
resultList.add(row);
}
// 处理结果集
for (Map<String, Object> row : resultList) {
for (Map.Entry<String, Object> entry : row.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
System.out.println("---------------------------");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭资源
try {
if (resultSet != null) resultSet.close();
if (preparedStatement != null) preparedStatement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
这样,无论查询的表有多少列,都可以自动获取列的数量和列的名称。