⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 db2dialect.java

📁 jsf+spring+ibatis 的一个程序,主要用来介绍JSF程序.
💻 JAVA
字号:
package com.wxd.common.paging;

/**
 * 分页查询方言支持DB2实现 (没有在db2中进行测试,请根据测试结果进行调整)
 * 参考hibernate 实现
 * @author <a href="mailto:zhuw@chinauip.com">zhuwei </a>
 * @version 1.0
 */
public class DB2Dialect implements Dialect {

	protected static final String SQL_END_DELIMITER = ";";

	public String getLimitString(String sql, boolean hasOffset) {
		int startOfSelect = sql.toLowerCase().indexOf("select");
		StringBuffer pagingSelect = (new StringBuffer(sql.length() + 100))
				.append(sql.substring(0, startOfSelect)).append(
						"select * from ( select ").append(getRowNumber(sql));
		if (hasDistinct(sql))
			pagingSelect.append(" row_.* from ( ").append(
					sql.substring(startOfSelect)).append(" ) as row_");
		else
			pagingSelect.append(sql.substring(startOfSelect + 6));
		pagingSelect.append(" ) as temp_ where rownumber_ ");
		if (hasOffset)
			pagingSelect.append("between ?+1 and ?");
		else
			pagingSelect.append("<= ?");
		return pagingSelect.toString();
	}

	public String getLimitString(String sql, int pageIndex, int pageSize) {
		sql = sql.trim();
		int m = pageIndex * pageSize;
		int n = m + pageSize;

		int startOfSelect = sql.toLowerCase().indexOf("select");
		StringBuffer pagingSelect = (new StringBuffer(sql.length() + 100))
				.append(sql.substring(0, startOfSelect)).append(
						"select * from ( select ").append(getRowNumber(sql));
		if (hasDistinct(sql))
			pagingSelect.append(" row_.* from ( ").append(
					sql.substring(startOfSelect)).append(" ) as row_");
		else
			pagingSelect.append(sql.substring(startOfSelect + 6));
		pagingSelect.append(" ) as temp_ where rownumber_ ");

		pagingSelect.append("between " + m + "+1 and " + n);

		return pagingSelect.toString();
	}

	private static boolean hasDistinct(String sql) {
		return sql.toLowerCase().indexOf("select distinct") >= 0;
	}

	private String getRowNumber(String sql) {
		StringBuffer rownumber = (new StringBuffer(50))
				.append("rownumber() over(");
		int orderByIndex = sql.toLowerCase().indexOf("order by");
		if (orderByIndex > 0 && !hasDistinct(sql))
			rownumber.append(sql.substring(orderByIndex));
		rownumber.append(") as rownumber_,");
		return rownumber.toString();
	}

	public boolean supportsLimit() {
		return true;
	}

	private String trim(String sql) {
		sql = sql.trim();
		if (sql.endsWith(SQL_END_DELIMITER)) {
			sql = sql.substring(0, sql.length() - 1
					- SQL_END_DELIMITER.length());
		}
		return sql;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -