sqlserveradapter.java

来自「EasyJForum 是一个基于 Java 技术的免费社区论坛软件系统」· Java 代码 · 共 76 行

JAVA
76
字号
package com.hongshee.ejforum.data.sql;

/**
 * <p>Title: SqlServerAdapter.java</p>
 * <p>Description: SqlServerAdapter</p>
 * <p>Copyright: Hongshee Software (c) 2007</p>
 * @author jackie du
 * @version 1.0
 */

import java.lang.reflect.Field;
import com.hongshee.ejforum.data.SqlAdapter;

public class SqlServerAdapter extends SqlAdapter 
{
    public SqlServerAdapter()
    {
    }

    public void init() throws Exception
    {
        Field[] fields = super.getClass().getFields();
        Object fieldValue = null;
        for (int i=0; i<fields.length; i++)
        {
            fieldValue = fields[i].get(this);
            if (fieldValue != null)
            {
                fields[i].set(this, fieldValue.toString().replace("NOW()", "GETDATE()"));
            }
        }
    }
    
    public String getPageQuerySql(StringBuilder sqlBuf, 
                                  int pageNo, int pageRows, int totalCount)
    {
        if (pageNo == 1)
        {
            int p = sqlBuf.indexOf("select");
            sqlBuf.insert(p+6, " TOP " + pageRows);
            return sqlBuf.toString();
        }
        else
        {
            int[] pageParams = getPageQueryParams(pageNo, pageRows, totalCount);
            
            int p = sqlBuf.indexOf("order by");
            String orderBy = sqlBuf.substring(p);
            String descOrderBy = 
                orderBy.replace("ASC","ASC1").replace("DESC", "ASC").replace("ASC1","DESC");
            
            p = sqlBuf.indexOf("select");
            sqlBuf.insert(p+6, " TOP " + pageParams[1]);
            sqlBuf.insert(0, "select * from (select TOP " + pageParams[0] + " * from (");
            sqlBuf.append(") page_a ").append(descOrderBy).append(") page_b ").append(orderBy);
            return sqlBuf.toString();
        }
    }
    
    protected int[] getPageQueryParams(int pageNo, int pageRows, int totalCount)
    {
        int[] result = new int[2];
        int offset = pageNo * pageRows;
        if (offset <= totalCount)
            result[0] = pageRows;
        else
        {
            result[0] = totalCount % pageRows;
            if (result[0] == 0)
                result[0] = pageRows;
        }
        result[1] = offset;
        return result;
    }
}

⌨️ 快捷键说明

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