JDBC查询返回list加map类型数据

JDBC查询mysql数据库返回list<map<String,Object>>类型数据

本来以为把数据库的数据弄出来是件很easy的事情
在这踩了个坑,引以为戒
话不多说,上代码


package com.easyui.dao.impl;
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;
import com.easyui.dao.IAdminNavDao;

public class AdminNavImpl implements IAdminNavDao{
	private final String URL = "jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8";
	private final String USERNAME ="root";
	private final String PASSWORD ="admin";
	Connection connection = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
==以上忽略==
	@Override
	public List<Map<String, Object>> getAdminNavs(String idi) {

	//在这里实例化了list和map,,,最后发现姿势不对,我勒了个去
//		List list = new ArrayList<>();
//		Map map = new HashMap<>();
		
		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection(URL,USERNAME,PASSWORD);
			String sql = "select * from admin_nav ";
			pstmt = connection.prepareStatement(sql);
			rs = pstmt.executeQuery();
			//为了代码的完整性就把代码都贴出来了--------
			int count = rs.getMetaData().getColumnCount();//获取列数
			//根据各路前辈的代码比对了下
			//list实例化的正确姿势
			List list = new ArrayList<>();
				while(rs.next()) {
					//map实例化的正确姿势
					Map map = new HashMap<>();
					for(int i=1;i<count;i++) {
		//这里是复杂版获取数据库数据,为了便于理解,大佬路过勿喷
					int id = rs.getInt("id");
					String text = rs.getString("text");
					String iconCls = rs.getString("iconCls");
					String state = rs.getString("state");
					int parentId = rs.getInt("parentId");
					map.put("id", id);
					map.put("text", text);
					map.put("iconCls", iconCls);
					map.put("state", state);
					map.put("parentId", parentId);
				//这里是简化版获取数据,
				//Object value = rs.getObject(i); 
				//Object key = rs.getMetaData().getColumnName(i);
				//map.put(key,value);

					}
					//把map存入list中
					list.add(map);	
				}
			return list;
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			return null;
		}catch (SQLException e) {
			e.printStackTrace();
			return null;
		} finally {
			try {
			if(rs!=null)rs.close();
			if(pstmt!=null)pstmt.close();
			if(connection!=null)connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
}
`
ok~~~
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您要查询数据是符合 ZTree 树形结构的数据,那么您可以使用 Java 来查询这些数据并将其转换为符合 ZTree 要求的格式。以下是一个简单的示例代码,该代码使用 JdbcTemplate 进行数据查询,并将查询结果转换为 ZTree 所需的 JSON 格式: ``` import java.util.List; import java.util.Map; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; public class ZTreeDataDao { private JdbcTemplate jdbcTemplate; public ZTreeDataDao(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public List<Map<String, Object>> getZTreeData() { String sql = "SELECT id, name, parent_id FROM category"; return jdbcTemplate.query(sql, new ZTreeDataMapper()); } private class ZTreeDataMapper implements RowMapper<Map<String, Object>> { @Override public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException { Map<String, Object> data = new HashMap<>(); data.put("id", rs.getLong("id")); data.put("name", rs.getString("name")); data.put("pId", rs.getLong("parent_id")); return data; } } } ``` 在这个示例中,我们定义了一个 `ZTreeDataDao` 类,用于从数据库中获取 ZTree 所需的数据。我们使用了一个 `JdbcTemplate` 对象来执行 SQL 查询查询结果将从数据库中获取所有分类的 `id`、`name` 和 `parent_id` 字段。我们还定义了一个 `ZTreeDataMapper` 类,用于将查询结果转换为 ZTree 所需的 JSON 格式。在 `mapRow` 方法中,我们将查询结果转换为一个 `Map` 对象,并将其返回。 请注意,这个示例假设您的数据库表中包含 `id`、`name` 和 `parent_id` 字段。如果您的表结构不同,您需要相应地修改 SQL 查询语句和 `ZTreeDataMapper` 类。 最后,您可以在您的 Spring MVC 控制器中使用以下代码来获取 ZTree 所需的数据: ``` @RequestMapping("/ztreeData") @ResponseBody public List<Map<String, Object>> getZTreeData() { return zTreeDataDao.getZTreeData(); } ``` 在这个示例中,我们定义了一个 `/ztreeData` 请求映射,该映射将返回 ZTree 所需的数据。我们在控制器中注入了 `ZTreeDataDao` 对象,并从中获取数据。最后,我们将数据转换为 JSON 格式,并将其作为响应主体返回给客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值