//本程序使用了一个类反射的类,可以自动将查询出来的值填充到值对象里。
//这个类可以参见ibm的文章:使用类反射机制简化struts的开发.
package com.lyjWeb.wyhn.common;
import java.sql.*;
import com.lyjWeb.common.*;
import java.util.*;
public class Fenye {
private Connection con=null;
private String sql="";
private String page="1";// 当前页
private int i_page=1;//当前页
private int i_page_count=10;//每页显示条数
private String nextpage,prepage,sumpage,sumcount;
private String sql_select,sql_from,sql_where,sql_order;
private String sql_pre="";
private String sql_count=""; //count(*)语句
private ResultSet rst=null;
private PreparedStatement stm=null;
private Collection result_c=null;
private String s_null="无";
///////////////////////////输入值///////////////////////////////
public void setConnection(Connection con)
{
this.con=con;
}
public void setSql(String sql_select,String sql_from,String sql_where,String sql_order)
{
//this.sql=sql;
this.sql_select=sql_select;
this.sql_from=sql_from;
this.sql_where=sql_where;
this.sql_order=sql_order;
this.sql_count="select count(*) " + sql_from + " " + sql_where;
this.sql=sql_select + " " + sql_from + " " + sql_where + " " + sql_order;
}
public void setStm(PreparedStatement stm)
{
this.stm=stm;
}
public void setPage(String p)
{
if(p==null)
{
this.page="1";
this.i_page=1;
}
else
{
p=p.trim();
if(p.equals("")) p="1";
this.page=p;
this.i_page=Integer.parseInt(this.page);
}
}
public void setPageCount(int pcount)
{
this.i_page_count=pcount;
}
public void setSqlPre(String sqlpre)
{
this.sql_pre=sqlpre;
}
public void setS_null(String s_null)
{
this.s_null=s_null;
}
//////////////////////////////////////返回值///////////////////////////////////////////
public ResultSet getRst()
{
return rst;
}
public String getPage()
{
return page;
}
public String getNextPage()
{
return nextpage;
}
public String getPrePage()
{
return prepage;
}
public String getSumPage()
{
return sumpage;
}
public String getCount()
{
return sumcount;
}
public Collection getCollection()
{
return result_c;
}
////////////////////////////////////////操 作///////////////////////////////////////////////
private String b_string,f_string;
private String comsql;
private void CountPage() throws Exception
{
//try{
PreparedStatement stm1=con.prepareStatement(sql_count);
ResultSet rst_count=stm1.executeQuery();
rst_count.next();
int i_sum=rst_count.getInt(1);
rst_count.close();
rst_count=null;
stm1.close();
stm1=null;
this.sumcount=String.valueOf(i_sum);
int page_all=0;
if (i_sum % i_page_count==0)
{
page_all=i_sum / i_page_count;
}
else{
page_all=i_sum / i_page_count+1;
}
sumpage=String.valueOf(page_all);
if(i_page>page_all)
{
i_page=page_all;
page=String.valueOf(i_page);
}else if(i_page<1)
{
i_page=1;
page=String.valueOf(i_page);
}
if(i_page==page_all)
nextpage=String.valueOf(i_page) ;
else
nextpage=String.valueOf(i_page+1) ;
if(i_page==1)
prepage="1";
else
prepage=String.valueOf(i_page-1);
int f_number=i_page * i_page_count;
int b_number=f_number-i_page_count+1;
b_string=String.valueOf(b_number);
f_string=String.valueOf(f_number);
//}catch(Exception e)
//{
// System.out.println("Error in fenye:" + e.toString());
//}
}
private void ComSql()
{
comsql= " from (select rownum row_id ,ttttt2.* from( " + sql + " ) ttttt2 ) where row_id between " + b_string + " and " + f_string;
if(sql_pre.equals(""))
comsql=sql_select + comsql;
else
comsql=sql_pre+comsql;
//return comsql;
}
private void SearchData() throws Exception
{
String s=comsql;
stm=con.prepareStatement(s);
rst=stm.executeQuery();
}
public int DoFenye()
{
try{
this.CountPage();
this.ComSql();
this.SearchData();
return 1;
}catch(Exception e)
{
System.out.println("Error in fenye:" + e.toString());
return 0;
}
}
public int DoFenyeCollection(String thedao)
{
try{
System.out.println(sql_count);
this.CountPage();
this.ComSql();
System.out.println(comsql);
result_c=Tool.Select(comsql,thedao,con,s_null);
return 1;
}catch(Exception e)
{
System.out.println("Error in fenye:" + e.toString());
return 0;
}
}
}