开发者社区> 问答> 正文

继续SQL2000分页----传参问题? 400 报错

继续SQL2000分页----传参问题? 400 报错

@JFinal 你好,想跟你请教个问题:

继续上一次自定义分页(SQL2000)问题,现在又遇到一问题,上次是没加入查询参数的情况下是可以的(查所有记录),现在我想加入一些查询条件(一些查询参数),如下:

String  sql= " from ( "+
      " select t1.id,t1.dh,t1.dDate,t1.vTec_Dh,t1.nMK_id,t1.vCustNo,t1.vContatPer,t1.vContaTEL "+
      " ,t1.vCurrencyNo,t1.phr,t1.phr_name,t1.lphbz,t1.phrq,t2.StyleCode as PadNo,t2.size_fw as SizeRange "+
      " ,case when t1.lPhbz=1 then '已批核'  else  '未批核' end as vPhzt "+
      " from Sal_Quotation t1 " +
      " left join  Mould_Style t2 on t1.nMK_id = t2.id "+
      " left join  customs_matKind t3  on t2.vCustoms_code=t3.kindCode "+
      " left join pay_mstr  t4 on t1.vPayTerm=t4.pay_code "+
      " left join SCR_Transport_Mstr t5  on t1.vDelyTerm=t5.transCode "+
      " left join Base_customs_type t6  on t1.vCustomsFormat=t6.vCode "+
      " where t1.dDate=? and t1.vCustNo like ? and t2.styleCode like ?) t1   ";

加了3个参数,由于在自定义分页中这个sqlExceptSelect拼接了2次,所以生成后的分页SQL语句就变成了6个?号,也就是变成了6个参数,然后我传参也传6个:

Object[] paras=new Object[6];

但现在问题来了,在Model中有一句统计总记录数的代码,生成后如下:

select count(*)  from ( select t1.id,t1.dh,t1.dDate,t1.vTec_Dh,t1.nMK_id,t1.vCustNo,t1.vContatPer,t1.vContaTEL ,t1.vCurrencyNo,t1.phr,t1.phr_name,t1.lphbz,t1.phrq,t2.StyleCode as PadNo,t2.size_fw as SizeRange ,case when t1.lPhbz=1 then '已批核' else '未批核' end as vPhzt from Sal_Quotation t1 left join Mould_Style t2 on t1.nMK_id = t2.id left join customs_matKind t3 on t2.vCustoms_code=t3.kindCode left join pay_mstr t4 on t1.vPayTerm=t4.pay_code left join SCR_Transport_Mstr t5 on t1.vDelyTerm=t5.transCode left join Base_customs_type t6 on t1.vCustomsFormat=t6.vCode where t1.dDate=? and t1.vCustNo like ? and t2.styleCode like ?) t1

此句只有3个参数,而刚传的是6个参数,所以导致出错:

com.jfinal.plugin.activerecord.ActiveRecordException: com.microsoft.sqlserver.jdbc.SQLServerException: 索引 4 超出范围。

问题是如果只传三个参数,此处能通过,而到最后生成的总的分页SQL语句又不行了,它要6个参数才行,请问这又如何解决?thks.

 

展开
收起
爱吃鱼的程序员 2020-06-05 13:20:36 485 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    说实话,我没明白你为什么要手写分页。。。

    JFinal中有直接的分页接口,Model.pagenate(...)和Db.pagenate(...),你只需要将SQL语句、SQL参数、分页参数传入,它会自动帮你处理分页。结果放在Page<Model>或Page<Record>中,返回的对象中本身就包含了分布时的TotalRow、TotalPage、CurrentPage等信息。。。

    多看看API吧。。。

    ######正常需要几个参数######

    引用来自“JFinal”的评论

    正常需要几个参数

    参数是不定的呀,现在查询界面只设3个input查询参数,如果日后要加多查询条件,参数个数就会增加.

    ######SQL2000分页就烦在这,它不像mySQL,分页有个limit关键字,SQL2000自定义分页要把传进来的sqlExceptSelect作两次处理.######

    引用来自“糊搞”的评论

    说实话,我没明白你为什么要手写分页。。。

    JFinal中有直接的分页接口,Model.pagenate(...)和Db.pagenate(...),你只需要将SQL语句、SQL参数、分页参数传入,它会自动帮你处理分页。结果放在Page<Model>或Page<Record>中,返回的对象中本身就包含了分布时的TotalRow、TotalPage、CurrentPage等信息。。。

    多看看API吧。。。

    你用过MS-SQL2000数据库就明白了######

    引用来自“JFinal”的评论

    正常需要几个参数

    引用来自“andying”的评论

    参数是不定的呀,现在查询界面只设3个input查询参数,如果日后要加多查询条件,参数个数就会增加.

         我是说具体到某个情况下是几个参数,假定你是两个参数,保障一下生成的 sql 只有两个问号即可,例如:

    User.me.paginate(10, 20, "select *", "from ... where ? ..., ?", para_1, para_2);



    生成的 sql 与参数个数一定要相同,至于如何保障相同,写好程序即可打完收工,尤其你的分页程序要写好

    ######

    引用来自“JFinal”的评论

    正常需要几个参数

    引用来自“andying”的评论

    参数是不定的呀,现在查询界面只设3个input查询参数,如果日后要加多查询条件,参数个数就会增加.

    引用来自“JFinal”的评论

         我是说具体到某个情况下是几个参数,假定你是两个参数,保障一下生成的 sql 只有两个问号即可,例如:

    User.me.paginate(10, 20, "select *", "from ... where ? ..., ?", para_1, para_2);



    生成的 sql 与参数个数一定要相同,至于如何保障相同,写好程序即可打完收工,尤其你的分页程序要写好

    问题是SQL2000自定义分页做不到吧?  能不能自定义Model,重载一下paginate,但这个方法又是私有的

    private Page<M> paginate(Config config, Connection conn, int pageNumber, int pageSize, String select, String sqlExceptSelect, Object... paras) throws Exception {

     

    ######参考一下mysql与oracle的分页方法,参考着实现即可打完收工######这样回答说明你还没理解JFinal的分页是如何处理的
    2020-06-05 13:20:48
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载