??xml version="1.0" encoding="utf-8" standalone="yes"?>中文字幕影音在线,黄动漫视频高清在线,日本午夜精品视频在线观看http://www.aygfsteel.com/michaellee/category/39010.htmljava人生?..MichaelLeezh-cnThu, 16 Apr 2009 11:43:15 GMTThu, 16 Apr 2009 11:43:15 GMT60jsp+oracle分页代码http://www.aygfsteel.com/michaellee/articles/266022.htmlMichaelLeeMichaelLeeThu, 16 Apr 2009 11:37:00 GMThttp://www.aygfsteel.com/michaellee/articles/266022.htmlhttp://www.aygfsteel.com/michaellee/comments/266022.htmlhttp://www.aygfsteel.com/michaellee/articles/266022.html#Feedback0http://www.aygfsteel.com/michaellee/comments/commentRss/266022.htmlhttp://www.aygfsteel.com/michaellee/services/trackbacks/266022.html说明Q?/p>

1.我的数据库名叫aaaQ密码是123

2.定数据库中有数?q是查询功能+分页

创徏数据库sql

CREATE TABLE users (
username varchar2(100),
department varchar2(100),
headship varchar2(100),
)

cL在src下的com包中

db.java

package com;

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException;

public class db {

public static Connection getConnection() throws ClassNotFoundException, SQLException 
     { 
         Connection con = null; 
         Class.forName("oracle.jdbc.driver.OracleDriver"); 
         String url = "jdbc:oracle:thin:@你的ip:1521:aaa"; 
         con = DriverManager.getConnection(url, "SYSTEM","123"); 
         return con; 
     } 
}

查询面MyJsp.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ page import="java.sql.*"%>
<jsp:directive.page import="com.*;"/>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <base href="<%=basePath%>">
  
    <title>My JSP 'a.jsp' starting page</title>
  
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">  
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
    <%!
int pageSize = 5;//每页昄的记录数
int pageCount = 0;//总页?br /> %>
<%!
Connection con;
Statement sql;
ResultSet rs;
%>
<%
try
{      
   con = db.getConnection();
        Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);//可滚动查询数据的l果?br />    request.setCharacterEncoding("GB2312");
   rs = stmt.executeQuery("select * from users") ;
        rs.last(); //让游标到表中的最后一?br />         int rowCount = rs.getRow(); //获取记录L.
         pageCount = (rowCount % pageSize == 0) ? (rowCount / pageSize ) : (rowCount / pageSize +1);
        int showPage = 1;//当前?br /> //取得用户所指定的页
String goToPage = request.getParameter("showPage");
    if (goToPage == null){
         goToPage = "1";
     }
    //转换成整?br />     try{
         showPage = Integer.parseInt(goToPage);
     }
    catch (NumberFormatException ex){
         showPage = 1;
     }
    //当前小于等于第一则按第一늮 如果 当前大于等于总页数则为最后页
    if(showPage <=1){
         showPage = 1;
     }
    else if(showPage >= pageCount){
         showPage = pageCount;
     }
    //游标的位|?(当前?- 1) * 面大小 + 1
    int posion = (showPage -1 ) * pageSize + 1;
    //讄游标的位|?br />      rs.absolute(posion);
%>
   <table border="1">
    <tr>
     <td width="160">用户?lt;/td>
     <td width="160">部门</td>
     <td width="160">职位</td>
    </tr>
     </table>
<%
   int i =0;
   //循环昄表中的数?pageSize(每页所昄的记?
   //rs.isAfterLast() 游标是否在最后一行之后说明后面已l没记录
   while(i<pageSize && !rs.isAfterLast()){
%>
   <table border="1">
   <col width="160px"/><col width="160px"/><col width="160px"/><col width="160px"/>
    <tr>
     <td><%=rs.getString("username")%></td>
     <td><%=rs.getString("department")%></td>
     <td><%=rs.getString("headship")%></td>
        </tr>
        <%rs.next();i++;}%>
        </table>
<form action="" method="get">
   <table border="1">
    <tr>
     <td>当前W?lt;%=showPage%>?lt;/td>
     <td>?lt;%=pageCount%>?lt;/td>
     <td>
      <a href="MyJsp.jsp?showPage=1">首页</a>
       <a href="MyJsp.jsp?showPage=<%=showPage-1%>">上一?lt;/a>
      <a href="MyJsp.jsp?showPage=<%=showPage+1%>">下一?lt;/a>
      <a href="MyJsp.jsp?showPage=<%=pageCount%>">N</a>
     </td>
     <td> ?lt;%=rowCount%>条记?</td>
     <td>转到
      <input type="text" name="showPage" size="4"/>
           <input type="submit" name="go" value="提交"/>
          </td>
    </tr>
   </table>
</form>
<%
   con.close() ;
}
catch(Exception e)
{
   out.println(e) ;
}
%>
</body>
</html>



MichaelLee 2009-04-16 19:37 发表评论
]]>
jsp+oracle数据?servlet分页思想http://www.aygfsteel.com/michaellee/articles/265975.htmlMichaelLeeMichaelLeeThu, 16 Apr 2009 07:14:00 GMThttp://www.aygfsteel.com/michaellee/articles/265975.htmlhttp://www.aygfsteel.com/michaellee/comments/265975.htmlhttp://www.aygfsteel.com/michaellee/articles/265975.html#Feedback0http://www.aygfsteel.com/michaellee/comments/commentRss/265975.htmlhttp://www.aygfsteel.com/michaellee/services/trackbacks/265975.html    
   
  具体说明如下Q?nbsp;     
   
  public   int   curPage   ;   //当前是第几页      
  public   int   maxPage   ;   //一共有多少?nbsp;     
  public   int   maxRowCount   ;   //一共有多少?nbsp;     
  public   int   rowsPerPage   ;   //每页有多行      
  public   yourDataType   yourdata   ;//装蝲每页的数?nbsp;   
  关于每页所要显C的"实体数据"的蝲体,其实现方式多U多P比如说在IBM电子商务pȝMPE中是以bean的Ş式,q是一U面向对象的实现Q比较的略的实现可用java.util.Vector{,Z避免分散Ҏ心问题的的注意力Q这里用youDataType予以抽象.      
   
  public   void   countMaxPage()   {       //Ҏ总行数计总页?nbsp;       
  if   (this.maxRowCount   %   this.rowsPerPage==0){    
        this.maxPage   =   this.maxRowCount/this.rowsPerPage;    
  }else{    
        this.maxPage   =   this.maxRowCount/this.rowsPerPage   +   1;    
          }    
  }    
       
  this.rowsPerPage其实应从配置文g中获得,q样做的好处是程序能在运行中d从而实现动态(再)配置,略的做法是直接写在程序中?nbsp;     
  public   PageControl(yourPersistenceLayer   yourPL)      
  q是一个参数类型ؓyourPersistenceLayer的构造函?PersistenceLayer是直接同数据库打交道的一层,不同的公叔R有不同的实现Q比如说Microsoft的ADO可以看作是一PersistenceLayer,IBM在其MPEpȝ中也实现了一个庞大的PersistenceLayer,.   一U投机的做法是不要PersistenceLayer,或者可以说是E化该层,q样做势必降低系l的E_性,可重用?可扩展性?nbsp;  具体可以参考附录文?在这个构造函CQ有q样几个主要操作Q?nbsp;     
  this.maxRowCount   =   yourPL.getAvailableCount();     //得到总行?nbsp;   
  this.yourdata         =   yourPL.getResult();                     //得到要显CZ本页的数?nbsp;   
  this.countMaxPage();                                                   //计算总页?nbsp;   
   
       
   
   
  关于this.yourdataq里q有一个细节:在从数据库中获取"实体数据"?通常有两U方?(A)一ơ性获取所有数据;(B)每次Ҏ当前号Q获取本늚数据Q将其它数据予以抛弃Q考虑到数据往往是大量甚x量的,如果一ơ性的获取Q那么这些数据必然大量占用服务器内存资源Qɾpȝ性能大大降低Q因此徏议用方法(AQ?nbsp;   
   
  接下来的工作可以交lservlet和jsp?nbsp;     
  在servlet的service()Ҏ中只需q行如下操作Q?nbsp;     
  PageControl     pageCtl   =   yourBusinessObject.listData(req.getParameter("jumpPage"));    
  req.setAttribute("pageCtl",pageCtl);    
   
       
  说明QyourBusinessObject装了商业逻辑Q是位于Business   Logic   Layer中的一个对象,q用OOAD的方法,装商业对象Q在Persistent   Layer之上l徏坚实的Business   Logic   Layer同样是构建大型电子商务架构的关键所在。本文的x点只是分处理,暂不详细.    
   
  在每个想要实现翻|C数据的jsp面中,我们的工作也很简?其代码是公式化的Q?nbsp;     
  <jsp:useBean   id="pageCtl"   class="yourpackage.PageControl"   scope="request"></jsp:useBean>    
  <%if(pageCtl.maxPage!=1)){%>    
  <form   name="PageForm"   action="/servlet/yourpackage.yourservlet"   method="post">    
  <%@   include   file="/yourpath/pageman.jsp"%>      
  </form>    
  <%}%>    
   
       
   
   
  说明Q?nbsp;     
  if(pageCtl.maxPage!=1)实现了这样一个逻辑Q如果所取得数据不一?那么׃用进行翻|C?nbsp;     
  我们注意?lt;%@   include   file="/yourpath/pageman.jsp"%>q得真正的页部分完全得到了重?    
   
  那么pageman.jsp到底做了些什么呢Q它实现了经常做页处理的h耳熟能详的逻辑      
  QAQ第一|不能再向前翻Q?nbsp;   
  QBQ最后一|不能再向后翻Q?nbsp;   
  同时能够q行面L跌{Q具体代码如下:      
  每页<%=pageCtl.rowsPerPage%>?nbsp;   
  ?lt;%=pageCtl.maxRowCount%>?nbsp;   
  W?lt;%=pageCtl.curPage%>?nbsp;   
  ?lt;%=pageCtl.maxPage%>?nbsp;   
   
   
  <%if(pageCtl.curPage==1){   out.print("   首页   上一?);   }else{   %>          
  <A   HREF="javascript:gotoPage(1)">首页    
  <A   HREF="javascript:gotoPage(<%=pageCtl.curPage-1%>)">上一?nbsp;   
  <%}%>    
  <%if(pageCtl.curPage==pageCtl.maxPage){   out.print("下一?nbsp;  N");   }else{   %>          
  <A   HREF="javascript:gotoPage(<%=pageCtl.curPage+1%>)">下一?nbsp;   
  <A   HREF="javascript:gotoPage(<%=pageCtl.maxPage%>)">N    
  <%}%>    
  转到W?lt;SELECT   name="jumpPage"   onchange="Jumping()">    
            <%   for(int   i=1;i<=pageCtl.maxPage;i++)   {    
  if   (i==   pageCtl.curPage){    
  %>    
            <OPTION   selected   value=<%=i%>><%=i%></OPTION>    
    <%}else{%>    
            <OPTION   value=<%=i%>><%=i%></OPTION>    
            <%}}%>          
            </SELECT>?nbsp;   
   
       
  在页面上会呈现出形如下图的外观,至于惌修饰化Q那是美工的工作所在?nbsp;   
   
   
   
  最后附上用于页面蟩转的javascript公共函数:      
  function   Jumping(){    
      document.PageForm.submit();    
      return   ;    
  }    
   
  function   gotoPage(pagenum){    
      document.PageForm.jumpPage.value   =   pagenum;    
      document.PageForm.submit();    
      return   ;    
  }    
   
       
   
   
  如果他们位于名ؓTurnPage.js的文件中Q那么在每个要实现翻|据显C的jsp面中加上这L引用Q?nbsp;     
  <SCRIPT   Language="JavaScript"   src="/yourPath/TurnPage.js"></SCRIPT>

MichaelLee 2009-04-16 15:14 发表评论
]]>
Oracle数据库中最常用的SQL语句http://www.aygfsteel.com/michaellee/articles/265264.htmlMichaelLeeMichaelLeeMon, 13 Apr 2009 05:30:00 GMThttp://www.aygfsteel.com/michaellee/articles/265264.htmlhttp://www.aygfsteel.com/michaellee/comments/265264.htmlhttp://www.aygfsteel.com/michaellee/articles/265264.html#Feedback0http://www.aygfsteel.com/michaellee/comments/commentRss/265264.htmlhttp://www.aygfsteel.com/michaellee/services/trackbacks/265264.html?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=SQL">SQL语句q行调整Q往往有一前期工作,是定位最常用的SQL 语句?font color="#0000ff">Oracle数据?/span>可以从多个方面取得SQL语句。如?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CA%FD%BE%DD">数据库自w的存储q程或者函C取得Q也可以从前台的应用E序中取得。所以,数据?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%B9%DC%C0%ED">理员必d会如何从数据库当前程序库~存中对已经存在的SQL语句q行采样。了解当前用最频繁的SQL语句以及其对应的资源消耗情c只有如此,数据库管理员才能够对症下药,解决SQL语句执行效率不高的问题。  ?font color="#0000ff">Oracle数据库中有多U方法可以帮助数据库理员定位常用的SQL语句。笔者在q里介绍比较常用的两U方法?br />   一、查?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CF%B5%CD%B3">pȝ表sys.wrh$_sqlsta?/strong>
  在数据库pȝ中有如下一张表。这张表存储中Oracle数据库执行过的SQL语句的相xc?br />   
  如上面这张表中,他会反映某个特定Sql语句的执行信息。其中第一个参数Excutions_Total参数U录了某条SQL语句d执行的次数。而第二个参数Disk-Reads-Totali参数则统计了从磁盘中d数据的次数。当SQL语句的执行次数特别多而且又是多次从磁盘中d数据的话Q那么数据库理员就要注意了。因Z盘中读取数据要比从内存中读取数据慢的多。此Ӟ若数据库理员能够想方设法,让这些执行频率高的SQL语句不直接从盘中读取数据,而是从内存中d数据Q那么就可以非常有效的提高SQL语句的执行效率?br />   另外数据库可以员也可以通过StatspackҎ来定位SQL语句。当我们启用q个功能的时候,数据库会生成一张Stats$Sql_summary的表。他的功能跟上面q张表类|只是他会有选择的纪录相关的信息?br />   在Sql_Parameter会记入相关的条g。如当SQL语句执行ơ数大于多少才进行纪?又或者当SQL语句执行盘dơ数大于多少时进行统计等{。通过q个qoQ会让数据库理员了解更多的信息。但是,q里要注意一个问题,当Q何一个指标超?Oracle官方资料上把q个指标叫做阀?的时候,pȝ׃往上面q个表中d一条纪录。所以如果这个指?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%C9%E8%D6%C3">讄的比较低Q当数据库比较繁忙的时候,我们会发现这张表会变得非常的z跃。数据库会时不时的向q张表中dU录?br />   所以,如果数据库管理员想用q种Ҏ来定位SQL语句的话Q那么需要同时做好两工?br />   一是需要根据SQL调整q程来随时调整这个指标。当我们数据库管理员需要对SQL语句q行调整的时候,必要降低指标倹{如此才能够定位那些不常用的SQL语句Qƈ对其q行调整。但是,降低指标gD数据库向q个表中d更多的纪录。此Ӟ数据库管理员在调整过后,p手工删除q表中多余的数据?br />   二是要定期的查看q表中的内容。因为随着pȝ应用时机的不同,有些SQL语句可能在某个时D后不再使用。所以,如果SQL调整不再使用q些内容的话Q则数据库管理员从这张表中删除他们就昑־非常的必要了?br />
二、用第三方工具对其q行定位?/strong>  除了Oracle数据库自带的工具之外Q我们数据库理员还可以利用一些第三方的工h者脚本来对常用的SQL语句q行定位?br />   如有些公司开发了一些GUI工具。这些工具可以帮助我们数据库理员迅速显C程序库~存中的SQL 语句Qƈ且通过一些参敎ͼq可以抽取执行频率比较高的或者耗用资源比较多的SQL语句。另外,我们也可以自己写一些SQL脚本。通过q个脚本来直接读取数据库~存中的SQL语句?br />   采用W三方工h时候会比上面这个方法更加的有用。因Z面这个方法其U录的是一个过d的结果。而直接在~存中读取的数据Q则反映的是及时的数据。如当用户发觉数据库性能降低的时候,则数据库理员可以采用这些工P了解SQL语句的执行情况,看看是否是因为SQL语句所造成的?br />   当数据库理员找到媄响数据库性能的那个SQL语句之后Q我们就可以Ҏ个可疑的SQL语句q行调整?br />   如数据库理员可以更改优化器模式。在Oracle数据库中Q提供了不少的优化器模式Q如最快优化器或者耗用资源最优化器{等。数据库理员可以尝试更改不同的优化器模式,然后让数据库产生多个执行计划。通过Ҏ个计划进行追t、分析、计Ӟ来确定那个执行计划具有最快的执行旉?br />   如可以添加提C,来强制改变执行计划,来获得最优的执行旉。调整SQL语句的过E包含多个操作。SQL语句的调整从全局水^转移到特定的水^。SQL语句调整的终极目标是~短SQL语句的执行时间。Oracle数据库中不同的执行计划,其执行所需要的旉是不同的。出于调整的需要,数据库管理员可以通过向所选择的语句中d提示的方式,强制Ҏ行计划进行修攏V?br />   如可以通过d索引来删除不必要的全表扫描。烦引是提高数据库查询性能的一个法宝。当SQL语句查询效率低下Q数据库理员想到的W一个方法就是能否对表添加合适的索引来提高SQL语句的查询效率。通过对表d索引Q特别是Z位图和基于函数的索引Q?可以防止一些不必要的全表扫描。不q,在后l调整的q程中给表添加烦引的话,要注意一个问题。就是添加烦引后Q可能会造成许多其他的SQL语句执行计划的改变。所以,在ؓ某一个SQL语句调整d或者删除了某个索引之后Q可能会发现其他的SQL语句执行效率有所改变。故一般在后期的SQL语句调整q程中,我们都不怎么数据库管理员对原来的索引q行调整。在实有必要的情况下,数据库管理员要能够站在一个全局的角度,去评估烦引更改后对其他SQL语句执行计划的媄响。从而最l确定这么处理是否合适?br />   另外在对单独的SQL语句q行调整的时候,q需要注意一个持久化的问题。也是_对SQL语句的调_无论是执行计划的调整Q还是优化器模式的改变,其效果不能够只是暂时的。让SQL语句调整变得更持久,只有如此Q调整才有实际意义?br />   如何才能够提高调整后的SQL语句的持久性呢?W者这里有一个小的徏议。如果通过以上的定位方法,了解到某条SQL语句执行频率非常高,或者耗用的资源比较多Q又或者多ơ从盘中读取数据。对于这USQL语句Q如何保证调整的持久化呢?此时Q可以改变SQL语句的来源来辑ֈ持久化的目的。如当数据库理员发现SQL语句是来源于应用E序。此Ӟ在调整的q程中,数据库管理员可以考虑Q把应用E序传递过来的SQL语句打包攑օ存储q程Q然后把存储q过E放入Oraclepȝ的Y件包中来实现。他可以让我们定。位SQL语句的工作来的简?而且Q他q得所有远E?的应用程序更加便于移植,因ؓ对Oracle的调用都是封装在数据库函数或者过E之中?br />   从以上的分析中我们可以看出,要对SQL语句q行调整Q无论是采取何种方式Q第一件工作就是要定位需要对哪些SQL语句q行调整。ؓ了提高调整的效果Q哪些执行频率高、耗用资源多的SQL语句Q就成ؓ我们调整的对象。所以,如何定位q些语句显得至关重要。我们只要找到这些SQL语句Q就可以使得我们的优化工作事半功?

MichaelLee 2009-04-13 13:30 发表评论
]]>
վ֩ģ壺 ɽ| ٰ| | ϲ| | İ| ǿ| ˳| | | | | Ͽ| ء| ɽ| | | ȷɽ| Ұ| Ƹ| ͺ| Ƥ| ˱| | | | ѧ| ɫ| | | | 㶫ʡ| ϽϽ| Ϫ| | ƽɽ| ֦| | ľ˹| | Ϫ|