熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

分頁顯示Oracle數據庫記錄的類(2.0)

2022-06-13   來源: Java核心技術 

  <?php
  
  class TOracleViewPage {
  
  var $Table;  //表名
  var $MaxLine; //每頁顯示行數
  
  var $LinkId;  //數據庫連接號
  var $Id;    //排序參考字段
  
  var $Offset;  //記錄偏移量
  var $Total;  //記錄總數
  var $Number;  //本頁讀取的記錄數
  var $TopNumber;//讀新記錄時實際取出的記錄數
  var $Result;  //讀出的結果
  var $TopResult;//讀新記錄時的結果
  
  var $TheFirstPage;//特殊指定第一頁的鏈接
  var $StartRec;    //指定第二頁的起始記錄號
  
  var $TPages;  //總頁數
  var $CPages;  //當前頁數
  
  var $TGroup;
  var $PGroup; //每頁顯示的頁號個數
  var $CGroup;
  
  var $Condition;  //顯示條件 如where id=$id order by id desc
  var $PageQuery;  //分頁顯示要傳遞的參數
  
  //
  // 以下構造函數析構函數及初始化函數
  //
  
  //構造函數
  //參數表名最大行數分頁參考的字段每頁顯示的頁號數
  
  function TOracleViewPage($TB$ML$id){
  global $offset;
  
  $this>Table=$TB;
  $this>MaxLine=$ML;
  $this>Id=$id;
  
  $this>StartRec=;
  if(isset($offset)) $this>Offset=$offset;
  else $this>Offset=;
  
  $this>Condition=;
  $this>TheFirstPage=NULL;
  $this>PageQury=NULL;
  }
  
  //初始化
  //參數用戶名密碼數據庫
  function InitDB($user$password$db){
  if (PHP_OS == WINNT) $dllid=dl(php_ocidll);
  $this>LinkId = OCILogon($user$password$db);
  }
  
  //斷開
  function Destroy(){
  OCILogoff($this>LinkId);
  }
  
  //
  // Set 函數
  //
  
  //設置顯示條件
  //如where id=$id order by id desc
  //要求是字串符合SQL語法(本字串將加在SQL語句後)
  
  function SetCondition($s){
  $this>Condition=$s;
  }
  
  //設置每組的顯示個數
  function SetNumGroup($pg){
  $this>PGroup=$pg;
  }
  //設置首頁如無則為NULL
  function SetFirstPage($fn){
  $this>TheFirstPage=$fn;
  }
  //設置起始記錄如無則取默認
  function SetStartRecord($org){
  $this>StartRec=$org;
  }
  
  //設置傳遞參數
  // key參數名 value參數值
  // 如setpagequery(id$id);如有多個參數要傳遞可多次調用本函數
  
  function SetPageQuery($key$value){
  $tmp[key]=$key; $tmp[value]=$value;
  $this>PageQuery[]=$tmp;
  }
  
  //
  // Get 函數
  //
  
  //取記錄總數
  function GetTotalRec(){
  
  $SQL=SELECT Count(*) AS total FROM $this>Table $this>Condition;
  
  $stmt = OCIParse($this>LinkId$SQL);
  $bool = OCIExecute($stmt);
  if (!$bool)  {
  echo 連接失敗!;
  OCILogoff($this>LinkId);
  exit;
  }
  else   {
  OCIFetch($stmt);
  $this>Total=OCIResult($stmt);
  }
  OCIFreeStatement($stmt);
  }
  
  //取總頁數當前頁
  function GetPage(){
  $this>TPages=ceil($this>Total/$this>MaxLine);
  $this>CPages=ceil($this>Offset/$this>MaxLine)+;
  }
  
  //取總組數當前組
  function GetGroup()  {
  $this>TGroup=ceil($this>TPages/$this>PGroup);
  $this>CGroup=ceil($this>CPages/$this>PGroup);
  }
  
  
  //
  // 工作函數
  //
  
  //讀取記錄
  // 主要工作函數根據所給的條件從表中讀取相應的記錄
  // 返回值是一個二維數組Result[記錄號][字段名]
  
  function ReadList() {
  
  $SQL=SELECT * FROM $this>Table $this>Condition ORDER BY $this>Id DESC;
  
  $stmt = OCIParse($this>LinkId$SQL);
  $bool = OCIExecute($stmt);
  if (!$bool)  {
  echo 連接失敗!;
  OCILogoff($this>LinkId);
  exit;
  }
  else   {
  $ncols = OCINumCols($stmt);
  for ( $i = ; $i <= $ncols; $i++ )
  $column_name[$i] = OCIColumnName($stmt$i);
  $k=;
  
  for($j=;$j<$this>StartRec+$this>Offset;$j++) OCIFetch($stmt);
  for($j=;$j<$this>MaxLine;$j++){
  if(OCIFetch($stmt)){
  $k++;
  for($i=;$i<=$ncols;$i++)
  $temp[$column_name[$i]]=OCIResult($stmt$i);
  $this>Result[]=$temp;
  }
  else break;
  }
  $this>Number=$k;
  
  }
  OCIFreeStatement($stmt);
  return $this>Result;
  }
  
  //讀最新的記錄
  //topnum指定要讀出的記錄數
  
  function ReadTopList($topnum){
  
  $SQL=SELECT * FROM $this>Table $this>Condition ORDER BY $this>Id DESC;
  
  $stmt = OCIParse($this>LinkId$SQL);
  $bool = OCIExecute($stmt);
  if (!$bool)  {
  echo 連接失敗!;
  OCILogoff($this>LinkId);
  exit;
  }
  else  {
  $ncols = OCINumCols($stmt);
  for ( $i = ; $i <= $ncols; $i++ )
  $column_name[$i] = OCIColumnName($stmt$i);
  $k=;
  
  for($j=;$j<$topnum;$j++){
  if(OCIFetch($stmt)){
  $k++;
  for($i=;$i<=$ncols;$i++)
  $temp[$column_name[$i]]=OCIResult($stmt$i);
  $this>TopResult[]=$temp;
  }
  else break;
  }
  $this>TopNumber=$k;
  
  }
  OCIFreeStatement($stmt);
  return $this>TopResult;
  
  }
  
  //
  // 分頁相關
  //
  
  //顯示當前頁及總頁數
  //本函數在GetPage()後調用
  function ThePage() {
  echo $this>CPages頁/共$this>TPages;
  }
  
  //顯示翻頁按鈕
  //此函數要在GetPage()函數之後調用
  //顯示下頁上頁並加上要傳遞的參數
  
  function Page() {
  $k=count($this>PageQuery);
  $strQuery=;  //生成一個要傳遞參數字串
  for($i=;$i<$k;$i++){
  $strQuery=&$this>PageQuery[$i][key]=$this>PageQuery[$i][value];
  }
  
  return $strQuery;
  }
  
  function PrePage($strQuery){
  $prev=$this>Offset$this>MaxLine;
  if($prev>=)
  echo <A href=$PHP_SELF?offset=$prev$strQuery class=newslink>上一頁</A>;
  else if($this>TheFirstPage!=NULL)
  echo <A $this>TheFirstPage class=newslink>上一頁</A>;
  else echo 上一頁;
  }
  
  function NexPage($strQuery){
  $next=$this>Offset+$this>MaxLine;
  $k=$this>Total$this>StartRec;
  if($next<$k)
  echo <A href=$PHP_SELF?offset=$next$strQuery class=newslink>下一頁</A>;
  else
  echo 下一頁;
  }
  
  //
  // 記錄分組
  //
  //顯示分組
  function NumPage()  {
  $first=($this>CGroup)*($this>PGroup)+;
  $last=($first+$this>PGroup > $this>TPages)? ($this>TPages+):($first+$this>PGroup);
  $pr=($this>CGroup>=)?( ($this>CGroup)*($this>PGroup)+ ):();
  $prev=($pr!=)?( ($pr)*$this>MaxLine):();
  $ne=($this>CGroup*$this>PGroup+<=$this>TPages)?($this>CGroup*$this>PGroup+):();
  $next=($ne!=)?( ($ne)*$this>MaxLine):();
  
  $k=count($this>PageQuery);
  $strQuery=;  //生成一個要傳遞參數字串
  for($i=;$i<$k;$i++){
  $strQuery=&$this>PageQuery[$i][key]=$this>PageQuery[$i][value];
  }
  
  if($first!=)
  echo <A href=$PHP_SELF?offset=$prev$strQuery > <<
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25792.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.