Skip to content

Commit

Permalink
fix: 加个通用方法,控制QueryTimeout
Browse files Browse the repository at this point in the history
refer: #1469
  • Loading branch information
wendal committed Jan 14, 2019
1 parent 5b37d89 commit 903edbd
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 8 deletions.
5 changes: 5 additions & 0 deletions src/org/nutz/dao/impl/sql/NutStatement.java
Expand Up @@ -339,4 +339,9 @@ protected ValueAdaptor getAdapterBy(Object value) {
Jdbcs.guessEntityFieldColumnType(mf); Jdbcs.guessEntityFieldColumnType(mf);
return expert.getAdaptor(mf); return expert.getAdaptor(mf);
} }

public DaoStatement setQueryTimeout(int timeout) {
getContext().setQueryTimeout(timeout);
return this;
}
} }
14 changes: 9 additions & 5 deletions src/org/nutz/dao/impl/sql/run/NutDaoExecutor.java
Expand Up @@ -233,16 +233,14 @@ private void _runSelect(Connection conn, DaoStatement st)
ResultSet rs = null; ResultSet rs = null;
Statement stat = null; Statement stat = null;
try { try {

// 木有参数,直接运行 // 木有参数,直接运行
if (null == paramMatrix || paramMatrix.length == 0 if (null == paramMatrix || paramMatrix.length == 0
|| paramMatrix[0].length == 0) { || paramMatrix[0].length == 0) {
stat = conn.createStatement(st.getContext() stat = conn.createStatement(st.getContext()
.getResultSetType(), ResultSet.CONCUR_READ_ONLY); .getResultSetType(), ResultSet.CONCUR_READ_ONLY);
if (lastRow > 0) if (lastRow > 0)
stat.setMaxRows(lastRow); // 游标分页,现在总行数 stat.setMaxRows(lastRow); // 游标分页,现在总行数
if (st.getContext().getFetchSize() != 0) afterCreateStatement(stat, st);
stat.setFetchSize(st.getContext().getFetchSize());
rs = stat.executeQuery(sql); rs = stat.executeQuery(sql);
} }
// 有参数,用缓冲语句 // 有参数,用缓冲语句
Expand All @@ -263,8 +261,7 @@ private void _runSelect(Connection conn, DaoStatement st)
ResultSet.CONCUR_READ_ONLY); ResultSet.CONCUR_READ_ONLY);
if (lastRow > 0) if (lastRow > 0)
stat.setMaxRows(lastRow); stat.setMaxRows(lastRow);
if (st.getContext().getFetchSize() != 0) afterCreateStatement(stat, st);
stat.setFetchSize(st.getContext().getFetchSize());
for (int i = 0; i < paramMatrix[0].length; i++) { for (int i = 0; i < paramMatrix[0].length; i++) {
adaptors[i].set((PreparedStatement) stat, adaptors[i].set((PreparedStatement) stat,
paramMatrix[0][i], i + 1); paramMatrix[0][i], i + 1);
Expand Down Expand Up @@ -399,4 +396,11 @@ public OutParam(String name, int jdbcType) {
this.jdbcType = jdbcType; this.jdbcType = jdbcType;
} }
} }

protected void afterCreateStatement(Statement stat, DaoStatement st) throws SQLException {
if (st.getContext().getFetchSize() != 0)
stat.setFetchSize(st.getContext().getFetchSize());
if (st.getContext().getQueryTimeout() > 0)
stat.setQueryTimeout(st.getContext().getQueryTimeout());
}
} }
2 changes: 2 additions & 0 deletions src/org/nutz/dao/sql/DaoStatement.java
Expand Up @@ -255,4 +255,6 @@ public interface DaoStatement extends Serializable {
String forPrint(); String forPrint();


void setExpert(JdbcExpert expert); void setExpert(JdbcExpert expert);

DaoStatement setQueryTimeout(int timeout);
} }
13 changes: 10 additions & 3 deletions src/org/nutz/dao/sql/SqlContext.java
Expand Up @@ -26,6 +26,8 @@ public class SqlContext {
private Pager pager; private Pager pager;


private Map<String, Object> attrs; private Map<String, Object> attrs;

private int queryTimeout;


public SqlContext() { public SqlContext() {
// zozoh: 默认的,SQL 的游标类型是 TYPE_FORWARD_ONLY,即,使用各个数据库自有的分页语句 // zozoh: 默认的,SQL 的游标类型是 TYPE_FORWARD_ONLY,即,使用各个数据库自有的分页语句
Expand Down Expand Up @@ -113,9 +115,14 @@ public Pager getPager() {


public void setPager(Pager pager) { public void setPager(Pager pager) {
this.pager = pager; this.pager = pager;
// TODO 为何要这样写??为什么?!! SQLite死活不给我全部数据!! by wendal }
// if (null != pager && pager.getPageSize() > 0)
// this.fetchSize = pager.getPageSize(); public int getQueryTimeout() {
return queryTimeout;
}

public void setQueryTimeout(int queryTimeout) {
this.queryTimeout = queryTimeout;
} }


} }

0 comments on commit 903edbd

Please sign in to comment.