NutzCN Logo
问答 关于daocache 自定义sqlCallback 问题
发布于 3316天前 作者 Rekoe 2611 次浏览 复制 上一个帖子 下一个帖子
标签: cache dao

RT
自定义的callback 在第二次访问的时候 不能得到数据库值

Set<Integer> permIdSet = new HashSet();
		for (Integer roleId : roleIds) {
			Sql sqlPermIds = Sqls.create("select permission_id from $table $condition");
			sqlPermIds.vars().set("table", "t_role_permission");
			sqlPermIds.setCondition(Cnd.where("role_id", "=", roleId));
			sqlPermIds.setCallback(new SqlCallback() {

				@Override
				public Object invoke(Connection conn, ResultSet rs, Sql sql) throws SQLException {
					while (rs.next()) {
						permIdSet.add(rs.getInt(1));
					}
					return null;
				}
			});
			dao.execute(sqlPermIds);
		}
5 回复

那是肯定的, 因为callback不会执行了

得作为返回值

				@Override
				public Object invoke(Connection conn, ResultSet rs, Sql sql) throws SQLException {
				     Set<Integer> permIdSet = new HashSet();
					while (rs.next()) {
						permIdSet.add(rs.getInt(1));
					}
					return permIdSet;
				}

那怎么得到这个数据

@wendal
自定义sql的可以得到那个数据么 如果用了缓存

@Rekoe sql.getObject

来自炫酷的 NutzCN

ok
方式如下

Sql sqlPermIds = Sqls.create("select permission_id from $table $condition");
			sqlPermIds.vars().set("table", "t_role_permission");
			sqlPermIds.setCondition(Cnd.where("role_id", "=", roleId));
			sqlPermIds.setCallback(new SqlCallback() {
				Set<Integer> permIdSet = new HashSet();

				@Override
				public Object invoke(Connection conn, ResultSet rs, Sql sql) throws SQLException {
					while (rs.next()) {
						permIdSet.add(rs.getInt(1));
					}
					return permIdSet;
				}
			});
			dao.execute(sqlPermIds);
			sqlPermIds.getObject(Set.class)
添加回复
请先登陆
回到顶部