网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

构造分页sql的java类

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
importjava.sql.Connection;
    importjava.sql.DatabaseMetaData;
    importjava.sql.SQLException;
    /**
    *分页语句
    *1oracle
    *2sqlserver
    *3mysql
    *4db2
    *思路:
    *查询分页语句,先根据当前页数+每页记录数确定起始行+终止行
    *根据起始行+终止行,确定
    *@Title:SQLBuilder.java
    *@Packagecom.jiuqi.external.stockintf.util
    *@Description:TODO
    *@Company:北京久其软件股份有限公司
    *@authorshijianhang
    *@date2010-12-24上午09:48:06
    *@versionV1.0
    */
    publicclassSQLBuilder{
    privateStringselectParma;//select的字段
    privateStringwhereParam;//where的条件
    privateStringtable;//表名
    privateStringkey;//主键名
    privateStringorder;//排序
    privatebooleanasc;//升序or降序
    /**
    *构造函数
    *
    *@paramselectParma查询的字段,以逗号分隔
    *@paramwhereParam查询条件
    *@paramtable表名
    *@paramkey主键
    */
    publicSQLBuilder(String_selectParma,String_whereParam,String_table,String_key,String_order,boolean_asc){
    selectParma=_selectParma;
    whereParam=_whereParam;
    table=_table;
    key=_key;
    order=_order;
    asc=_asc;
    //调整空值
    if(whereParam==null||"".equals(whereParam)){
    whereParam="1=1";
    }
    if(order==null||"".equals(order)){
    order=key;
    }
    }
    /**
    *构造函数--没有指定排序顺序,默认为升序
    *
    *@paramselectParma查询的字段,以逗号分隔
    *@paramwhereParam查询条件
    *@paramtable表名
    *@paramkey主键
    *@param_order顺序
    */
    publicSQLBuilder(String_selectParma,String_whereParam,String_table,String_key,String_order){
    selectParma=_selectParma;
    whereParam=_whereParam;
    table=_table;
    key=_key;
    order=_order;
    asc=true;//默认升序
    //调整空值
    if(whereParam==null||"".equals(whereParam)){
    whereParam="1=1";
    }
    if(order==null||"".equals(order)){
    order=key;
    }
    }
    /**
    *构造简单的sql语句
    *
    *@return
    */
    publicStringbuildSQL(){
    StringBufferstr=newStringBuffer();
    //select*fromtable1whereid=?
    str.append("SELECT").append(selectParma).append("FROM").append(table).append("WHERE").append(whereParam).append("ORDERBY").append(order).append("").append(asc?"ASC":"DESC");
    returnstr.toString();
    }
    /**
    *构造指定行数内的sql语句
    *
    *@paramconn
    *@paramcurrPage
    *@paramnumPerPage
    *@return
    */
    publicStringbuildRowSQL(Connectionconn,intstartNum,intendNum){
    //构造分页sql
    StringpageSql=null;
    try{
    DatabaseMetaDatadbmd=conn.getMetaData();
    Stringdbname=dbmd.getDatabaseProductName().toLowerCase();
    if(dbname.indexOf("oracle")!=-1){//后台数据库为Oracle
    pageSql=buildOracleRowSQL(startNum,endNum);
    returnpageSql;
    }elseif(dbname.indexOf("sqlserver")!=-1||dbname.indexOf("sqlserver")!=-1){//后台数据库为SqlServer
    pageSql=buildSqlserverRowSQL(startNum,endNum);
    returnpageSql;
    }elseif(dbname.indexOf("mysql")!=-1){//后台数据库为MySql
    pageSql=buildMysqlRowSQL(startNum,endNum);
    returnpageSql;
    }elseif(dbname.indexOf("db2")!=-1){//后台数据库为DB2
    pageSql=buildDB2RowSQL(startNum,endNum);
    returnpageSql;
    }
    }catch(SQLExceptione){
    e.printStackTrace();
    }
    returnpageSql;
    }
    /**
    *构造分页的sql语句
    *
    *@paramconn
    *@paramcurrPage
    *@paramnumPerPage
    *@return
    */
    publicStringbuildPageSQL(Connectionconn,intcurrPage,intnumPerPage){
    //计算分页的起始行数
    intstartNum=numPerPage*(currPage-1)+1;//起始行
    intendNum=currPage*numPerPage;//终止行
    //构造分页sql
    StringpageSql=null;
    try{
    DatabaseMetaDatadbmd=conn.getMetaData();
    Stringdbname=dbmd.getDatabaseProductName().toLowerCase();
    if(dbname.indexOf("oracle")!=-1){//后台数据库为Oracle
    pageSql=buildOracleRowSQL(startNum,endNum);
    returnpageSql;
    }elseif(dbname.indexOf("sqlserver")!=-1||dbname.indexOf("sqlserver")!=-1){//后台数据库为SqlServer
    pageSql=buildSqlserverRowSQL(startNum,endNum);
    returnpageSql;
    }elseif(dbname.indexOf("mysql")!=-1){//后台数据库为MySql
    pageSql=buildMysqlRowSQL(startNum,endNum);
    returnpageSql;
    }elseif(dbname.indexOf("db2")!=-1){//后台数据库为DB2
    pageSql=buildDB2RowSQL(startNum,endNum);
    returnpageSql;
    }
    }catch(SQLExceptione){
    e.printStackTrace();
    }
    returnpageSql;
    }
    /**
    *(1)oracle查询第startNum行到第endNum行的记录
    *
    *@paramstartNum
    *@paramendNum
    *@return
    */
    privateStringbuildOracleRowSQL(intstartNum,intendNum){
    //select*FROM(SELECTA.*,ROWNUMRNFROM(SELECT*FROM表whereid='root'orderbytorder)AWHEREROWNUM<=终止行号)whereRN>=起始行号
    //sql(SELECT*FROM表whereid='root'orderbytorder)不用修改,直接在其上封装两个select并限定行数
    Stringsql=buildSQL();
    StringBufferstr=newStringBuffer();
    str.append("SELECT*FROM(SELECTt.*,ROWNUMRNFROM(").append(sql).append(")tWHEREROWNUM<=").append(endNum).append(")whereRN>=").append(startNum);
    //SELECT*FROM(SELECTt.*,ROWNUMRNFROM(select*fromt_filewhereid='AAA'orderbyf_order)tWHEREROWNUM<=6)whereRN>=4
    returnstr.toString();
    }
    /**
    *(2)sqlserver查询第startNum行到第endNum行的记录
    *
    *@paramstartNum
    *@paramendNum
    *@return
    */
    privateStringbuildSqlserverRowSQL(intstartNum,intendNum){
    //(1)ROW_NUMBER()OVER(ORDERBY表.排序)--适用于sqlserver2005以上
    //SELECT*FROM(SELECTTOP30*,ROW_NUMBER()OVER(ORDERBY表.排序)ASposFROM表)tWHEREt.pos>20ANDt.pos<=30
    StringBufferstr=newStringBuffer();
    StringBuffersql=newStringBuffer();
    sql.append("SELECT").append(selectParma).append(",ROW_NUMBER()OVER(ORDERBY").append(table).append(".").append(order).append("").append(asc?"ASC":"DESC").append(")ASposFROM").append(table).append("where").append(whereParam);
    str.append("SELECT*FROM(").append(sql).append(")tWHEREt.pos>=").append(startNum).append("ANDt.pos<=").append(endNum);
    //SELECT*FROM(SELECT*,ROW_NUMBER()OVER(ORDERBYt_file.f_order)ASposFROMt_filewhereid='AAA'orderbyf_order)tWHEREt.pos>=4ANDt.pos<=6
    /*
    //(2)排序的颠倒
    //SELECT*FROM(SELECTTOP10*FROM(SELECTTOP20*FROM表ORDERBY排序字段ASC)tORDERBY排序字段DESC)ORDERBY排序字段ASC
    StringBuffersql=newStringBuffer();
    StringBufferstr=newStringBuffer();
    intnumPerPage=endNum-startNum;
    sql.append("SELECTTOP").append(endNum).append("").append(selectParma).append("FROM").append(table).append("WHERE").append(whereParam).append("ORDERBY").append(order).append("").append(asc?"ASC":"DESC");
    str.append("SELECT*FROM(SELECTTOP").append(numPerPage).append("*FROM(").append(sql).append(")tORDERBY").append(order).append("").append(asc?"DESC":"ASC").append(")ORDERBY").append(order).append("").append(asc?"ASC":"DESC");
    //SELECT*FROM(SELECTTOP3*FROM(SELECTTOP6*FROMt_fileWHEREid='AAA'ORDERBYf_orderASC)tORDERBYf_orderDESC)ORDERBYf_orderASC
    */
    returnstr.toString();
    }
    /**
    *(3)mySql查询第startNum行到第endNum行的记录
    *
    *@paramstartNum
    *@paramendNum
    *@return
    */
    privateStringbuildMysqlRowSQL(intstartNum,intendNum){
    //select*fromtableWHERE…LIMIT10,20;#返回第10-20行数据
    Stringsql=buildSQL();
    StringBufferstr=newStringBuffer();
    str.append(sql).append("limit").append(startNum).append(",").append(endNum);
    //select*fromt_filewhereid='AAA'orderbyf_orderlimit4,6
    returnstr.toString();
    }
    /**
    *(4)db2查询第startNum行到第endNum行的记录
    *
    *@paramstartNum
    *@paramendNum
    *@return
    */
    privateStringbuildDB2RowSQL(intstartNum,intendNum){
    //与sqlserver的第二种方式差不多
    StringBufferstr=newStringBuffer();
    StringBuffersql=newStringBuffer();
    sql.append("SELECT").append(selectParma).append(",ROW_NUMBER()OVER()ASposFROM").append(table).append("where").append(whereParam).append("orderby").append(order).append("").append(asc?"ASC":"DESC");
    str.append("SELECT*FROM(").append(sql).append(")AStWHEREt.pos>=").append(startNum).append("ANDt.pos<=").append(endNum);
    //SELECT*FROM(SELECT*,ROW_NUMBER()OVER()ASposFROMt_filewhereid='AAA'orderbyf_order)AStWHEREt.pos>=4ANDt.pos<=6
    returnstr.toString();
    }
    //测试
    publicstaticvoidmain(String[]args){
    //selecttop3*fromt_filewhereid='AAA'WHEREidNOTIN(SELECTTOP6idFROMt_filewhereid='AAA')
    //selecttop*from(select*fromt_filewhereid='AAA')A
    SQLBuildersb=newSQLBuilder("id,name,age","name='shijianhang'","student","id","id");
    //System.out.println(sb.buildOracleRowSQL(2,3));
    //System.out.println(sb.buildSqlserverRowSQL(2,3));
    //System.out.println(sb.buildMysqlRowSQL(2,3));
    System.out.println(sb.buildDB2RowSQL(1,7));
    }
    }
    
  • 下一篇资讯: 日常SQL脚本
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师