ResultSetMetaData metaData = resultSet.getMetaData(); int columnCount = metaData.getColumnCount(); while (resultSet.next()) { Map map = new HashMap(); for (int i = 1; i <= columnCount; i++) { map.put(metaData.getColumnLabel(i), resultSet.getObject(i)); } mapList.add(map); }
时间: 2023-04-10 22:04:29 浏览: 162
这段代码是用于将数据库查询结果转换为 Map 的格式,其中 ResultSetMetaData 用于获取查询结果的元数据,getColumnCount() 方法用于获取查询结果的列数,next() 方法用于遍历查询结果的每一行,getColumnLabel(i) 方法用于获取第 i 列的列名,getObject(i) 方法用于获取第 i 列的值。最终将每一行的数据转换为一个 Map,再将所有的 Map 存储到一个 List 中。
相关问题
编写单一Servlet程序,仅用Servlet和jdbc技术不用spring。根据表名参数利用Connection.getMetaData()获取表的元数据字段结构,通过Response.getWriter()对象输出网页表单,实现数据列表、添加和编辑功能。
以下是一个简单的示例代码,实现了数据列表、添加和编辑功能:
```java
import java.io.IOException;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class MyServlet extends HttpServlet {
private Connection conn;
public void init() throws ServletException {
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "password");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String tablename = request.getParameter("tablename");
if (tablename == null) {
tablename = "mytable";
}
try {
DatabaseMetaData meta = conn.getMetaData();
ResultSet rs = meta.getColumns(null, null, tablename, null);
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("<html><head><title>" + tablename + "</title></head><body>");
response.getWriter().println("<h1>" + tablename + "</h1>");
response.getWriter().println("<table border=\"1\"><tr>");
while (rs.next()) {
response.getWriter().println("<th>" + rs.getString("COLUMN_NAME") + "</th>");
}
response.getWriter().println("<th>操作</th></tr>");
rs = conn.createStatement().executeQuery("SELECT * FROM " + tablename);
while (rs.next()) {
response.getWriter().println("<tr>");
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
response.getWriter().println("<td>" + rs.getString(i) + "</td>");
}
response.getWriter().println("<td><a href=\"?action=edit&tablename=" + tablename + "&id=" + rs.getString(1) + "\">编辑</a></td>");
response.getWriter().println("</tr>");
}
response.getWriter().println("</table>");
response.getWriter().println("<br><a href=\"?action=add&tablename=" + tablename + "\">添加</a>");
response.getWriter().println("</body></html>");
} catch (SQLException e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("action");
String tablename = request.getParameter("tablename");
if (tablename == null) {
tablename = "mytable";
}
if (action != null && action.equals("add")) {
try {
PreparedStatement ps = conn.prepareStatement("INSERT INTO " + tablename + " VALUES (null, ?, ?, ?)");
ps.setString(1, request.getParameter("field1"));
ps.setString(2, request.getParameter("field2"));
ps.setString(3, request.getParameter("field3"));
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
} else if (action != null && action.equals("edit")) {
try {
PreparedStatement ps = conn.prepareStatement("UPDATE " + tablename + " SET field1=?, field2=?, field3=? WHERE id=?");
ps.setString(1, request.getParameter("field1"));
ps.setString(2, request.getParameter("field2"));
ps.setString(3, request.getParameter("field3"));
ps.setString(4, request.getParameter("id"));
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
response.sendRedirect("?tablename=" + tablename);
}
public void destroy() {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
在这个示例中,我们通过 `Connection.getMetaData()` 方法获取了指定表的元数据信息,然后通过 `Response.getWriter()` 对象输出了一个简单的网页表单,实现了数据列表、添加和编辑功能。具体实现细节请参考代码注释。需要注意的是,这里我们使用了 MySQL 数据库,如果你使用的是其他数据库,请根据实际情况修改代码。
ResultSet 转 Map<String, Object> 或者 List<Map<String, Object>>
ResultSet 是 Java 中用于表示数据库查询结果的接口。如果你想将 ResultSet 转换为 Map<String, Object> 或者 List<Map<String, Object>>,可以按照以下步骤进行操作:
1. 将 ResultSet 转换为 Map<String, Object>:
首先,创建一个空的 Map<String, Object> 对象。然后,使用 ResultSet 的 getMetaData() 方法获取结果集的元数据信息,包括列名和列数。接下来,使用 ResultSet 的 next() 方法遍历结果集的每一行数据。在遍历的过程中,使用 ResultSet 的 getObject() 方法获取每一列的值,并将其存储到 Map 中,以列名作为键,列值作为值。最后,将每个 Map 添加到 List 中,即可得到 List<Map<String, Object>>。
下面是一个示例代码:
```java
ResultSet resultSet = ...; // 假设已经获取到 ResultSet 对象
List<Map<String, Object>> resultList = new ArrayList<>();
try {
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
while (resultSet.next()) {
Map<String, Object> rowMap = new HashMap<>();
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnName(i);
Object columnValue = resultSet.getObject(i);
rowMap.put(columnName, columnValue);
}
resultList.add(rowMap);
}
} catch (SQLException e) {
e.printStackTrace();
}
```
2. 将 ResultSet 转换为 List<Map<String, Object>>:
如果你只需要将 ResultSet 转换为 List<Map<String, Object>>,可以直接使用上述代码中的 resultList。
希望以上解答能够帮助到你!如果你还有其他问题,请继续提问。
阅读全文