package org.nutz.dao.sql; import java.sql.ResultSet; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.nutz.dao.FieldMatcher; import org.nutz.dao.pager.Pager; public class SqlContext { public static int DEFAULT_FETCH_SIZE = 0; private FieldMatcher fieldMatcher; private Object result; private int updateCount; private int fetchSize = DEFAULT_FETCH_SIZE; private int resultSetType; private Pager pager; private Map<String, Object> attrs; public SqlContext() { // zozoh: 默认的,SQL 的游标类型是 TYPE_FORWARD_ONLY,即,使用各个数据库自有的分页语句 // 但是如果数据库比较原始,你可以将游标类型设置成 TYPE_SCROLL_INSENSITIVE // 如果你还设置了 Pager,那么执行器应该使用 JDBC 游标的方式来进行分页 resultSetType = ResultSet.TYPE_FORWARD_ONLY; } public SqlContext attr(String name, Object value) { if (null == attrs) { attrs = new HashMap<String, Object>(); } attrs.put(name, value); return this; } public Object attr(String name) { return null == attrs ? null : attrs.get(name); } public <T> T attr(Class<T> type) { return attr(type, type.getName()); } @SuppressWarnings("unchecked") public <T> T attr(Class<T> classOfT, String name) { Object obj = attr(name); if (null == obj) return null; return (T) obj; } public boolean hasAttr(String name) { return null == attrs ? false : attrs.containsKey(name); } public Set<String> attrNames() { return null == attrs ? new HashSet<String>() : attrs.keySet(); } public FieldMatcher getFieldMatcher() { return fieldMatcher; } public SqlContext setFieldMatcher(FieldMatcher matcher) { this.fieldMatcher = matcher; return this; } public void setResult(Object result) { this.result = result; } public Object getResult() { return result; } public int getUpdateCount() { return updateCount; } public void setUpdateCount(int updateCount) { this.updateCount = updateCount; } public int getFetchSize() { return fetchSize; } public int getResultSetType() { return resultSetType; } public void setFetchSize(int fetchSize) { this.fetchSize = fetchSize; } public void setResultSetType(int resultSetType) { this.resultSetType = resultSetType; } public Pager getPager() { return pager; } public void setPager(Pager pager) { this.pager = pager; // TODO 为何要这样写??为什么?!! SQLite死活不给我全部数据!! by wendal // if (null != pager && pager.getPageSize() > 0) // this.fetchSize = pager.getPageSize(); } }