public List<HashMap> select(String sql) { List<HashMap> list = new ArrayList(); try { Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); while (rs.next()) { HashMap map = new HashMap(); int i = rsmd.getColumnCount(); for (int j = 1; j <= i; j++) { if (!rsmd.getColumnName(j).equals("ID")) { map.put(rsmd.getColumnName(j), rs.getString(j) == null ? "" : rs.getString(j)); } else { map.put("id", rs.getString(j)); } } list.add(map); } rs.close(); st.close(); } catch (SQLException e) { // TODO Auto-generated catch block System.out.println("--" + sql); e.printStackTrace(); } return list; }
时间: 2024-04-28 13:20:58 浏览: 70
这段代码是一个数据库查询方法,用于执行传入的 SQL 语句并返回查询结果。
方法的参数是一个 SQL 语句,方法内部先创建一个 `ArrayList` 对象 `list`,用于存储查询结果。然后在 `try` 块中创建一个 `Statement` 对象 `st`,通过 `conn.createStatement()` 方法创建一个可以执行 SQL 语句的 `Statement` 对象。接着调用 `st.executeQuery(sql)` 方法执行传入的 SQL 语句,返回一个 `ResultSet` 对象 `rs`,用于遍历查询结果。
在遍历查询结果时,首先通过 `rs.getMetaData()` 方法获取查询结果的元数据信息,即每一列的名称、类型等信息。然后在 `while` 循环中遍历查询结果的每一行,对于每一行,先创建一个 `HashMap` 对象 `map`,用于存储这一行的数据。然后通过 `rsmd.getColumnCount()` 方法获取查询结果的列数,通过 `for` 循环遍历每一列,将列名和列值存入 `map` 对象中,如果列名为 "ID",则将列名改为 "id"。最后将这个 `HashMap` 对象 `map` 添加到 `list` 列表中。
最后在 `try` 块中关闭 `ResultSet` 对象 `rs` 和 `Statement` 对象 `st`,并返回存储查询结果的 `list` 列表对象。如果在执行查询过程中出现异常,则会跳转到 `catch` 块中,打印错误信息并返回一个空的 `list` 列表对象。
相关问题
public HashMap find(String sql) { HashMap map = new HashMap(); //List<HashMap> list = new ArrayList(); try { Statement st = conn.createStatement(); System.out.println(sql); ResultSet rs = st.executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); while (rs.next()) { //HashMap map = new HashMap(); int i = rsmd.getColumnCount(); for (int j = 1; j <= i; j++) { if (!rsmd.getColumnName(j).equals("ID")) { String str = rs.getString(j) == null ? "" : rs.getString(j); if (str.equals("null")) str = ""; map.put(rsmd.getColumnName(j), str); } else map.put("id", rs.getString(j)); } //list.add(map); break; } rs.close(); st.close();
这段代码是用于执行 SQL 语句并将结果存储在 HashMap 中的 Java 代码。具体来说,它通过 JDBC 连接到数据库,创建 Statement 对象,执行 SQL 查询语句并将结果存储在 ResultSet 对象中。然后,它通过 ResultSetMetaData 获取结果集的元数据信息,循环遍历结果集的每一行,并将每一列的数据以键值对的形式存储在 HashMap 中。最后,它关闭 ResultSet 和 Statement 对象,释放资源。
需要注意的是,这段代码只会返回结果集中的第一行数据,并且会将 ID 列的值存储在 "id" 键中。如果需要返回多行数据,可以将 HashMap 存储在 List 中,每次循环时将 HashMap 加入 List 中。
用list<map>将数据库信息展示在前端
好的,以下是一个使用`List<Map>`将数据库信息展示在前端的示例Java代码:
```java
// 定义一个获取数据库中所有信息的方法
public List<Map<String, Object>> getAllData() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
List<Map<String, Object>> dataList = new ArrayList<>();
try {
// 获取数据库连接
conn = DriverManager.getConnection(DB_URL, USER, PASS);
// 执行查询语句
stmt = conn.createStatement();
String sql = "SELECT * FROM table_name";
rs = stmt.executeQuery(sql);
// 处理结果集
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
while (rs.next()) {
Map<String, Object> dataMap = new HashMap<>();
for (int i = 1; i <= columnCount; i++) {
dataMap.put(metaData.getColumnName(i), rs.getObject(i));
}
dataList.add(dataMap);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭资源
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return dataList;
}
```
在这个方法中,我们通过执行查询语句获取数据库中的所有数据,并将结果保存在一个`List<Map>`中。每个`Map`对象表示一条数据,其中`Map`的key表示列名,value表示对应的值。
接下来,我们将这个`List<Map>`传递给前端页面进行展示。以下是一个简单的JSP页面示例,在这个页面中,我们使用JSTL标签库来遍历`List<Map>`,并将每个`Map`中的数据展示出来:
```jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Database Data</title>
</head>
<body>
<table>
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
</tr>
</thead>
<tbody>
<c:forEach var="data" items="${dataList}">
<tr>
<td>${data.column1}</td>
<td>${data.column2}</td>
<td>${data.column3}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
```
在这个JSP页面中,我们使用`<c:forEach>`标签来遍历`List<Map>`中的每个`Map`对象,并使用`${data.key}`的方式来获取每个key对应的值。这样就可以将数据库中的数据展示在前端页面上了。
阅读全文