BlogJava-雨天~瀚海驼铃声,欢迎您的到来!-随笔分类-【SSH框架】http://www.blogjava.net/1504/category/39422.html我在等待中守望着,也在等待中追逐着,守望着我的理想,追逐着我的未来。梦是心的舞台,心有多大,舞台有多大。不轻易服输,不轻言放弃。zh-cnTue, 23 Jun 2009 21:05:10 GMTTue, 23 Jun 2009 21:05:10 GMT60通过GUID生成主键,保证主键全球惟一性【收藏】http://www.blogjava.net/1504/archive/2009/06/20/283346.html雨天~瀚海驼铃声雨天~瀚海驼铃声Sat, 20 Jun 2009 05:22:00 GMThttp://www.blogjava.net/1504/archive/2009/06/20/283346.htmlhttp://www.blogjava.net/1504/comments/283346.htmlhttp://www.blogjava.net/1504/archive/2009/06/20/283346.html#Feedback0http://www.blogjava.net/1504/comments/commentRss/283346.htmlhttp://www.blogjava.net/1504/services/trackbacks/283346.html 使用GUID作为数据表主键的好处
  
  使用GUID作为数据表主键的好处 使用GUID作为数据表主键的好处
  数据表主健通常采用以下三种方式:
  1. 自动递增值。
  2. 唯一名称。这个是使用自己定义的算法来生成一个唯一序列号。
  3. GUID(全局唯一标识符)。
  GUID与自动递增值及唯一名称比较GUID在客户端生成,由GUID的特性决定,通过GUID生成的值可能出现重复的机会几乎等于零,因此保证在插入表的时候主键值唯一。
  可以方便处理分布式数据的提交,比如:分店数据向总店提交――直接将该部分数据插入即可。
  支持离线数据处理。对本地数据包进行新增记录时即可将该数据表的关键字段值赋值,其处理方法是与在线新增时是一致的。
  自动递增值 在数据库服务器端生成,由于该值是由数据库系统内部处理的,亦保证其唯一性,但由于其是在数据库服务器端生成,因此必须将该值返回客户端,客户端通过该值过行其它操作。比如一张单据(主从表)是使用自动递增值,当插入单据抬头后,必须将单据抬头的关键字段值返回,再插入单据明细(单据明细是通过单据抬头关键字段进行关联的)。
  不能很好处理分布式数据的提交,比如:分店数据向总店提交――提交数据时必须重新生成该数据表的关键字段值,以保证该字段值唯一。
  要支持离线数据处理需要进行额外的处理,对本地数据包进行保存记录(保存到本地)时需要插入一个假设唯一值,在提交离线数据回数据服务器时再重新生成真正的唯一值,并重新进行相关的处理。
  唯一名称 在客户端生成或在服务端生成,相对于自动递增值不同的地方就是自己维护生成唯一值的算法及所保存的临时值,容易造成出错或其它问题。如果是在客户端生成唯一值的话,还必须保证所生成的值是唯一的。
  不能很好处理分布式数据的提交,比如:分店数据向总店提交――提交数据时必须重新生成(或预先处理)该数据表的关键字段值,以保证该字段值唯一
  要支持离线数据处理需要进行额外的处理,对本地数据包进行保存记录(保存到本地)时需要插入一个假设唯一值,在提交离线数据回数据服务器时再重新生成真正的唯一值,并重新进行相关的处理。
  实例说明下面以一个新增单据保存比较GUID与自动递增值/唯一名称的差别
  动作
  GUID
  自动递增值/唯一名称
  单据抬头
  
  新增
  单据抬头关键字段值:获取并填写
  单据抬头关键字段值:无
  保存
  直接保存
  首先获取并填写关键字段值,然后再进行保存
  返回
  直接返回
  返回时必须将关键字段值返回
  单据明细
  
  新增
  关联单据抬头字段值:直接填写
  单据明细关键字段值:获取并填写
  关联单据抬头字段值:无
  单据明细关键字段值:无
  保存
  直接保存
  获取单据抬头关键字段值并填写到单据明细的关联单据抬头字段中;
  然后获取并填写单据明细关键字段值;
  再进行保存
  
  综合以上所述,用GUID作为数据表的关键字段值是可以减轻关键字段相关的操作的,并且是最直接实用的方法。





以下是java中利用GUID生成主键的代码:

//生成UUID主键import java.util.UUID;   
  
public class Test {   
  
  public static void main(String[] args) {   
  
    for(int i=0;i<1000;i++){   
  
      UUID uuid = UUID.randomUUID();    
  
      System.out.println (uuid.toString().replaceAll("-",""));   
  
    }   
  
  }   
  
}


雨天~瀚海驼铃声 2009-06-20 13:22 发表评论
]]>
struts2中如何获得request.setAttribute("bean", beanObject);的值得在JSP页面显示【自己整理】http://www.blogjava.net/1504/archive/2009/06/20/283310.html雨天~瀚海驼铃声雨天~瀚海驼铃声Fri, 19 Jun 2009 16:27:00 GMThttp://www.blogjava.net/1504/archive/2009/06/20/283310.htmlhttp://www.blogjava.net/1504/comments/283310.htmlhttp://www.blogjava.net/1504/archive/2009/06/20/283310.html#Feedback0http://www.blogjava.net/1504/comments/commentRss/283310.htmlhttp://www.blogjava.net/1504/services/trackbacks/283310.html

public class DataMangAction extends ActionSupport implements ServletRequestAware, ModelDriven<DataMangForm>
{
   private String str;
   private HttpServletRequest request;
   private int pageSize = 2;
   private DataMangForm model = new DataMangForm();
  
  public String execute() throws Exception
  {
   System.out.println("ok");
   str="execute";
   return str;
  }
  public String init() throws Exception
  {
   DataMangForm dataMangForm = getModel();
         ArrayList baseInfoList;
         // 获取当前页码
         int pageNum = dataMangForm.getPageNum();
         DataMangOpertion dataMangOpertion=new DataMangOpertion();
         baseInfoList = dataMangOpertion.getAllBaseInfo(pageSize, pageNum);
         if (baseInfoList != null)
         {
          dataMangForm.setBaseInfoList(baseInfoList);
             Pagination pagination = dataMangOpertion.getPageInAction();
            
          pagination.setShowCurrentState(true);
          pagination.setShowPageNumber("dataMangAction!init.action", "", 10, 5);
          dataMangForm.setPagination(pagination);
          request.setAttribute("pagination", pagination);
         }
 
   str="init";
   return str;
  }
  public String toAdd() throws Exception
  {
   str="toAdd";
   return str;
  }
     public DataMangForm getModel()
  {
   return model;
  }

     public void setServletRequest(HttpServletRequest request)
     {
     this.request = request;
     }
}
2.pagination

public class Pagination
{

  /*
  ** pageSize      每页记录数
  ** recordCount   总记录数
  ** pageNum       当前页
  ** pageCount     总页数
  */
  private int pageSize;
  private int recordCount;
  private int pageNum;
  private int pageCount;
  private String showPageNumber="";
  private String showCurrentState;

  public Pagination()
  {
  }
  public Pagination(int pageNum,int pageSize,int recordCount,int pageCount)
  {
    this.setPageNum(pageNum);
    this.setPageSize(pageSize);
    this.setRecordCount(recordCount);
    this.setPageCount(pageCount);
  }
  public void setPageSize(int pageSize)
  {
    this.pageSize=pageSize;
  }
  public int getPageSize()
  {
    return pageSize;
  }
  public void setRecordCount(int recordCount)
  {
    this.recordCount=recordCount;
  }
  public int getRecordCount()
  {
    return recordCount;
  }
  public void setPageNum(int pageNum)
  {
    this.pageNum=pageNum;
  }
  public int getPageNum()
  {
    return pageNum;
  }
  public void setPageCount(int pageCount)
  {
    this.pageCount=pageCount;
  }
  public int getPageCount()
  {
    return pageCount;
  }
  //显示分页的当前状态信息
  public void setShowCurrentState(boolean bool)
  {
    if(bool)
    {
      this.showCurrentState = "共有" + recordCount + "条记录数,每页" + pageSize + "条,第<font color=\"red\">"+ pageNum + "</font>页,"+"共" +pageCount + "页." ;
    }
    else
    {
      this.showCurrentState="";
    }
  }
  public String getShowCurrentState()
  {
    return showCurrentState;
  }
  //显示分页码
  public void setShowPageNumber(String path,String parameters,String first,String previous,String next,String last)
  {
    if(pageNum>1)
    {
     showPageNumber="<a href=\"" +path+ "?pageNum=1" +parameters+ "\">" +first+ "</a>&nbsp;";
     showPageNumber=showPageNumber+"<a href=\"" +path+ "?pageNum=" +(pageNum-1)+parameters+ "\">" +previous+ "</a>&nbsp;";
   }
   if(pageNum<pageCount)
   {
     showPageNumber=showPageNumber+"<a href=\"" +path+ "?pageNum=" +(pageNum+1)+parameters+ "\">" +next+ "</a>&nbsp;";
     showPageNumber=showPageNumber+"<a href=\"" +path+ "?pageNum=" +pageCount+parameters+ "\">" +last+ "</a>&nbsp;";
   }
  }
  public void setShowPageNumber(String path,String parameters,int middleSize,int kipSize)
  {
    int start=(pageNum/kipSize)*kipSize+1;
    int end=start-1+middleSize;
    if(end>=pageCount)
    {
      end=pageCount;
    }
    if(start>kipSize)
    {
      showPageNumber="<a href=" +path+ "?pageNum=" +(start-2)+parameters+ ">" +"<<<"+ "</a>&nbsp;";
    }
    while(start<=end)
    {
      showPageNumber=showPageNumber+"<a href=" +path+ "?pageNum=" +start+parameters+ ">[" +start+ "]</a>&nbsp;";
      start++;
    }
    if(end<pageCount)
    {
      showPageNumber=showPageNumber+"<a href=" +path+ "?pageNum=" +(end+1)+parameters+ ">" +">>>"+ "</a>&nbsp;";
    }
  }
  public String getShowPageNumber()
  {
    return showPageNumber;
  }
}

3.在JSP页面显示
 ${pagination.showPageNumber}  ,${pagination.showCurrentState}

雨天~瀚海驼铃声 2009-06-20 00:27 发表评论
]]>