继续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.
说实话,我没明白你为什么要手写分页。。。
JFinal中有直接的分页接口,Model.pagenate(...)和Db.pagenate(...),你只需要将SQL语句、SQL参数、分页参数传入,它会自动帮你处理分页。结果放在Page<Model>或Page<Record>中,返回的对象中本身就包含了分布时的TotalRow、TotalPage、CurrentPage等信息。。。
多看看API吧。。。
######正常需要几个参数######参数是不定的呀,现在查询界面只设3个input查询参数,如果日后要加多查询条件,参数个数就会增加.
######SQL2000分页就烦在这,它不像mySQL,分页有个limit关键字,SQL2000自定义分页要把传进来的sqlExceptSelect作两次处理.######说实话,我没明白你为什么要手写分页。。。
JFinal中有直接的分页接口,Model.pagenate(...)和Db.pagenate(...),你只需要将SQL语句、SQL参数、分页参数传入,它会自动帮你处理分页。结果放在Page<Model>或Page<Record>中,返回的对象中本身就包含了分布时的TotalRow、TotalPage、CurrentPage等信息。。。
多看看API吧。。。
参数是不定的呀,现在查询界面只设3个input查询参数,如果日后要加多查询条件,参数个数就会增加.
我是说具体到某个情况下是几个参数,假定你是两个参数,保障一下生成的 sql 只有两个问号即可,例如:
User.me.paginate(10, 20, "select *", "from ... where ? ..., ?", para_1, para_2);
参数是不定的呀,现在查询界面只设3个input查询参数,如果日后要加多查询条件,参数个数就会增加.
我是说具体到某个情况下是几个参数,假定你是两个参数,保障一下生成的 sql 只有两个问号即可,例如:
User.me.paginate(10, 20, "select *", "from ... where ? ..., ?", para_1, para_2);
问题是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的分页是如何处理的
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。