posts - 167,  comments - 30,  trackbacks - 0
Oracle数据库写法:
--查询第5-10条记录
方式一:
select * from (select rownum myrow,t.* from efb_random_pwd t) where myrow between 5 and 10;

以下两种方式数据量大的时候效率好些。
方式二:

select * from (select rownum r,a.* from efb_random_pwd a where rownum<=20) where r>=10;   
方式三:
select * from efb_random_pwd where rowid in(
    select rid from (select rownum num,rowid rid from efb_random_pwd a where rownum <=10) where num > = 5);

MySql数据库写法:

select   *   from   tablename   where   LIMIT   9,10

 从10条开始取,取10条,则就是10--20


SqlServer数据库写法:

1:select top 20 * from tablename where id not exists (select top 10 * from tablename)//前20条记录再过滤掉前10条

2:select top10 * from (select top 20 * from order by column) order by column desc//子查询中取20条倒序,然后从子查询中取前10条


 


posted @ 2011-01-20 13:33 David1228 阅读(187) | 评论 (0)编辑 收藏

在学习javascript中正则是经常使用的,在正则中的特殊符号,需要转义等,下面对正则中的转义和特殊字符进行介绍

首先是元字符,意思是,在使用这些字符时,必须使用转义字符,负责会出错.
元字符有:()[]{}\^$|?*
任何时候用在正则表达式中用到以上字符必须进行转义.
举例:假如匹配?这个字符
var re = /\?/;
或者
var re = new RegExp("\\?");
正则中的特殊符号:    
注意到第二个正则,当用到\的时候,多用了\来进行转义\ 最后达到两个\\,叫做双重转义
其次 特殊符号
在则会功能则中可以使用ASCII代码也可以用Unicode代码.
当用字符用十六进制表示时,在字符签名必须加上\x
当用八进制时,在紫府前必须加上 \
当用Unicode编码表示是必须加上 \
还有其它一些特殊符号
字符      说明
\t  制表符
\n  换行符
\r  回车符
\a  换页符
\e  alert字符
\cX escape字符
\b  与X相对应的字符
\v  回退字符
\0  空字符
如果用RegExp构造函数来使用它们,则必须使用双重转义.
以上就是正则中的特殊符号


正则表达之字符类:

先说一下字符类的意思,字符类是用于测试的字符组合.字符类是放到中括号[]中的,可以有效的告诉正则去匹配.在字符类又分为五个简单的类,分别说一下
1.简单类
简单类就是你想要匹配的字母组
举例说明
var _class = /[abc]de/gi;
上面的一个字符类就是一个简单的类,可以匹配ade,bde,cde.三种,后面的g和i分别是全局和不区分大小写.
再简单类中还可以使用unicode编码
var _class = /[a\u0062c]de/gi;
这个跟上面的一样,可以匹配ade,bde,cde.三种,后面的g和i分别是全局和不区分大小写.
2.负向类
负向类就是你要排除的字母,用上尖号(^)表示负向类
举例//www.forasp.cn 转载请注明
var _class = /[^abc]de/gi;
用了负向类^就排除了a,b,c三个开头的字符串,即 ade,bde,cde都不匹配
3.范围类
范围类即指定从一个字符到另一个字符的范围,用中杠(-)表示.
举例
var _class = /[a-c]de/gi;//这就是表示从a到c,即,abc都匹配
上面的就匹配了ade,bde,cde.三种.也可以加上负向类表示不匹配
var _class = /[^a-c]de/gi;//这就是表示从a到c,即,abc都不匹配
4.组合类
组合类是有几种其它类的组合而合成的字符类.
举例
var _class = /[1-9a-c]/gi;
上面的表达式就是1-9或者a-c均能匹配,列举1,2,3,4,5,6,7,8,9,a,b,c
在此 要注意的是字符内部类之间不能有空格.还有不能有交叉.
5.预定义类//www.forasp.cn 转载请注明
预定义类就是将复杂的组合类预定义成特定的代码.
列举了javascrip中的预定义类
代码   等同于  匹配
.    [^\n\r]  出了换行和回车以外的任何字符
\d   [0-9]    数字
\D   [^0-9]   非数字
\s   [ \t\n\xB\f\r]  空白字符
\S   [^ \t\n\xB\f\r] 非空白字符
\w   [a-zA-Z_0-9]  单词字符,包括字母下划线和数字
\W   [^a-zA-Z_0-9]  非单词字符

以上就是常用的正则表达式的字符类,常用谨记

====================
正则表达之量词

正则表达式中的量词,规定了特定的字符串出现的次数.当指定某个模式应当出现的出售时,可以指定硬性数量.
可以说分为两类量词
1.简单量词,如下标识
代码   描述
?     出现零次或者一次
*     出现任意次数
+     至少出现一次
{n}   一定出现n次
{n,m} 至少出现n次最多出现m次
{n,}  至少出现n次
举例说明以上的标识,gi是全局部分大小写,下面就不说gi了.
var foraspcn = /[ab]?c/gi;//匹配 c,ac,bc
var foraspcn = /[ab]*c/gi;//匹配 c,aac,bbc...
var foraspcn = /[ab]+c/gi;//匹配 ac,bc,aac,bbc..
var foraspcn = /[ab]{1}c/gi;//匹配 ac,bc
var foraspcn = /[ab]{1,2}c/gi;//匹配 ac,bc,aac,bbc
var foraspcn = /[ab]{1,}c/gi;//匹配 ac,bc,aac,bbc...
看看看懂没有,有的时候有的是相等的比如
?就等于{0,1}
*等于{0,}
+等于{1,}
2.贪婪的,惰性的,支配性的量词
首先解释一下三种量词.
贪婪量词就是先看整个字符串师傅匹配,如果没有,则去掉字符串最后一个字符,再次匹配.一直到发现最后一个匹配或者字符串不剩下任何字符.目前的量词都是贪婪的.
惰性量词是首先看第一个字符是否匹配,如果单独这一个字符不够,则读入下一个,与组成两个字符去匹配,如果没有发现再次读取下一个字符,直到发现匹配或者整个字符串都没有匹配.惰性和贪婪正好相反.
支配量词擦好难过时匹配整个字符串,如果不匹配则不再尝试.支配量词就是整体匹配一次.$hidden$

贪婪的,惰性的,支配性的量词 表如下
贪婪的 惰性的 支配性 描述
?      ??     ?+    零次或者一次出现
*      *?     *+    零次或者多次出现
+      +?     ++    至少一次出现
{n}    {n}?   {n}+  正好n次出现
{n,m}  {n,m}? {n,m}+至少n次出现,至多m次出现
{n,}   {n,}?  {n,}+ 至少n次出现

以上就是正则中量词的相关内容

posted @ 2010-12-30 15:40 David1228 阅读(448) | 评论 (0)编辑 收藏

正则表达式中/i,/g,/ig,/gi,/m的区别和含义

/i (忽略大小写)
/g (全文查找出现的所有匹配字符)
/m (多行查找)
/gi(全文查找、忽略大小写)
/ig(全文查找、忽略大小写)

posted @ 2010-12-30 15:25 David1228 阅读(260) | 评论 (0)编辑 收藏
     摘要: TitleType text here... /**//* @projectDescription jQuery Password Strength Plugin - A jQuery plugin to provide accessibility functions...  阅读全文
posted @ 2010-12-30 14:47 David1228 阅读(2490) | 评论 (0)编辑 收藏

 

public class ExportExcelUtil {

 /**
  * 这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上
  *
  * @param title
  *            表格标题名
  * @param headers
  *            表格属性列名数组
  * @param dataset
    *     需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的
     *            javabean属性的数据类型有基本数据类型及String,Date,byte[](图片数据)
     * @param fieldNames
     *            传入的对应headers属性列名数组的具体的字段名称,javabean风格,模式如:model.user.name
  * @param out
  *            与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
  * @param pattern 
  *            如果有时间数据,设定输出格式。默认为"yyy-MM-dd"
  */

 public void exportExcel(String title, String[] headers,String[] fieldNames,List dataset, OutputStream out, String pattern) {
  headers=this.addString("序号", 0, headers);
  int column=headers.length;
  
  HSSFWorkbook hwb = POIExcelUtil.createWorkbook();// 创建一个excel工作单
  HSSFSheet hs=hwb.createSheet(title);
  
  HSSFPatriarch patriarch = hs.createDrawingPatriarch();
  // 定义注释的大小和位置,详见文档
  HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0,0, 0, 0, (short) 4, 2, (short) 6, 5));
  comment.setString(new HSSFRichTextString("提示:数据为单页数据!"));
  comment.setAuthor("liuhonglai");
  
  hs.addMergedRegion(new CellRangeAddress(0, (short) 0, 0,(short) (column - 1))); // 合并单元格
  int listSize = dataset!=null?dataset.size():0;
  int rows = listSize + 2;// 定义总的行数
  
  for (int i = 0; i < rows; i++) {// 循环创建行数
   HSSFRow hr = POIExcelUtil.createRow(i, hs);// 根据查询的数据在sheet中创建行
   for (int j = 0; j < column; j++) {// 循环列数
    HSSFCell hc = POIExcelUtil.createCell(j, hr);// 创建列
    if (i == 0) {// 控制第一行的样式
     HSSFCellStyle cs = POIExcelUtil.createCellStyle(hwb);
     HSSFFont font = POIExcelUtil.createFont(hwb);
     font.setFontHeightInPoints((short) 14);
     font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
     cs.setFont(font);// 设置字体
     cs.setWrapText(true);
     cs.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 下边框
     cs.setBorderLeft(HSSFCellStyle.BORDER_NONE);// 左边框
     cs.setBorderRight(HSSFCellStyle.BORDER_NONE);// 右边框
     cs.setBorderTop(HSSFCellStyle.BORDER_NONE);// 上边框
     cs.setAlignment(CellStyle.ALIGN_CENTER);// 设置水平对齐方式
     cs.setVerticalAlignment(CellStyle.VERTICAL_CENTER);// 设置垂直对齐方式
     StringBuffer buffer = new StringBuffer();
     buffer.append(title);
     POIExcelUtil.setSheetTitle(hs, cs, hr, hc, buffer.toString()); // 设置标题
     break;
    }
    if (i == 1) {// 控制第二行的样式,并设置列的名称
     HSSFCellStyle cs = POIExcelUtil.createCellStyle(hwb);
     hr.setHeightInPoints((float) 24);
     HSSFFont font = POIExcelUtil.createFont(hwb);
     cs.setFont(font);// 设置字体
     cs.setAlignment(CellStyle.ALIGN_CENTER);
     cs.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
     cs.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);// 设置单元格背景
     cs.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
     hc.setCellType(HSSFCell.CELL_TYPE_STRING);
     hc.setCellStyle(cs);
     hc.setCellValue(headers[j]);
    } else {// 设置内容
     if(dataset!=null){
      switch (j) {
      case 0: //序号
       hc.setCellValue(i - 1);
       break;
      default:
       Object t= dataset.get(i - 2);// 去掉前两行
          if(j==2||j==3){
           hs.setColumnWidth((int) j, (int) (35.7 * 150));
          }else{
           hs.setColumnWidth((int) j, (int) (35.7 * 80)); 
          }
       String fieldName =fieldNames[j-1];
      
       Object value=null;
//       String getMethodName = "get"+ fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
//       Class tCls = t.getClass();
//        try {
//         Method getMethod = tCls.getMethod(getMethodName,new Class[] {});
//         value = getMethod.invoke(t, new Object[] {});
//        } catch (SecurityException e) {
//         // TODO Auto-generated catch block
//         e.printStackTrace();
//        } catch (IllegalArgumentException e) {
//         // TODO Auto-generated catch block
//         e.printStackTrace();
//        } catch (NoSuchMethodException e) {
//         // TODO Auto-generated catch block
//         e.printStackTrace();
//        } catch (IllegalAccessException e) {
//         // TODO Auto-generated catch block
//         e.printStackTrace();
//        } catch (InvocationTargetException e) {
//         // TODO Auto-generated catch block
//         e.printStackTrace();
//        }
       
       value = getColumnValue(t, fieldName);
       String textValue = null;
        if (value instanceof Integer) {
           int intValue =( (Integer) value).intValue();
           textValue=String.valueOf(intValue);
        } else if (value instanceof Float) {
           float fValue = ((Float) value).floatValue();
           textValue=String.valueOf(fValue);
        } else if (value instanceof Double) {
         double dValue =( (Double) value).doubleValue();
         textValue=String.valueOf(dValue);
        } else if (value instanceof Long) {
         long longValue =( (Long) value).longValue();
         textValue=String.valueOf(longValue);
        }else if (value instanceof Boolean) {
        boolean bValue = ((Boolean) value).booleanValue();
        textValue=String.valueOf(bValue);
       } else if (value instanceof Date) {
        Date date = (Date) value;
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        textValue = sdf.format(date);
       } else if (value instanceof byte[]) {
        // 有图片时,设置行高为60px;
        hr.setHeightInPoints(60);
        // 设置图片所在列宽度为80px,注意这里单位的一个换算
        hs.setColumnWidth(i, (short) (35.7 * 80));
        // sheet.autoSizeColumn(i);
        byte[] bsValue = (byte[]) value;
        HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,
          1023, 255, (short) 6, i-1, (short) 6, i-1);
        anchor.setAnchorType(2);
        patriarch.createPicture(anchor, hwb.addPicture(
          bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));
       } else {
        // 其它数据类型都当作字符串简单处理
        if(value==null){
         textValue="";
        }else{
         textValue = value.toString();
        }
       }
        hc.setCellValue(textValue);
       break;
      }
     }
    }
   }
  }
  POIExcelUtil.setPrintSetup(hwb, hs, rows, column);
  try {
   hwb.write(out);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 /**
  * 递归方式处理.
  * @param obj 传入的对象
  * @param fileNames 有层级javabean方式,model.user.name
  * @return Object 值
  * @author david
  */
 private static Object getColumnValue(Object obj,String fieldNames){
  if(null != fieldNames && !"".equals(fieldNames)){
   try {
    Object objVal = null;
    int sp = fieldNames.indexOf(".");
    String fieldName = "";
    String afterFieldNames = "";
    
    if(sp == -1){
     fieldName = fieldNames;
    }else{
     fieldName = fieldNames.substring(0,sp);
     afterFieldNames = fieldNames.substring(sp + 1,fieldNames.length());
    }
    
    String getMethodName = "get"+ fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
    Class classz = obj.getClass();
    Method getMethod;
    getMethod = classz.getMethod(getMethodName,new Class[] {});
    objVal = getMethod.invoke(obj, new Object[] {});
    
    if(StringUtils.isBlank(afterFieldNames)){
     return objVal;
    }else{
     return getColumnValue(objVal, afterFieldNames);
    }
   } catch (SecurityException e) {
    e.printStackTrace();
   } catch (NoSuchMethodException e) {
    e.printStackTrace();
   } catch (IllegalArgumentException e) {
    e.printStackTrace();
   } catch (IllegalAccessException e) {
    e.printStackTrace();
   } catch (InvocationTargetException e) {
    e.printStackTrace();
   }
  }
  return null;
 }
 
  private  String[] addString(String str,int index,String[] old){
     String[] temp=new String[old.length+1];
     System.arraycopy(old, 0, temp, 0, old.length);
     for(int i=old.length;i>index;i--){
      temp[i]=temp[i-1];
     }
     temp[index]=str;
     return temp;
  }
}

posted @ 2010-12-02 15:45 David1228 阅读(423) | 评论 (0)编辑 收藏
 

POI导出EXCEL经典实现

web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下。(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^

呵呵,首先我们来导出EXCEL格式的文件吧。现在主流的操作Excel文件的开源工具有很多,用得比较多的就是ApachePOIJExcelAPI。这里我们用Apache POI!我们先去Apache的大本营下载POIjar包:http://poi.apache.org/ ,我这里使用的是3.0.2版本。

3jar包导入到classpath下,什么?忘了怎么导包?不会吧!好,我们来写一个导出Excel的实用类(所谓实用,是指基本不用怎么修改就可以在实际项目中直接使用的!)。我一直强调做类也好,做方法也好,一定要通用性和灵活性强。下面这个类就算基本贯彻了我的这种思想。那么,熟悉许老师风格的人应该知道,这时候该要甩出一长串代码了。没错,大伙请看:

package org.leno.export.util;

import java.util.Date;

public class Student {

   private long id;

   private String name;

   private int age;

   private boolean sex;

   private Date birthday;

   public Student() {

      super();

      // TODO Auto-generated constructor stub

   }

   public Student(long id, String name, int age, boolean sex, Date birthday) {

      super();

      this.id = id;

      this.name = name;

      this.age = age;

      this.sex = sex;

      this.birthday = birthday;

   }

   public long getId() {

      return id;

   }

   public void setId(long id) {

      this.id = id;

   }

   public String getName() {

      return name;

   }

   public void setName(String name) {

      this.name = name;

   }

   public int getAge() {

      return age;

   }

   public void setAge(int age) {

      this.age = age;

   }

   public boolean getSex() {

      return sex;

   }

   public void setSex(boolean sex) {

      this.sex = sex;

   }

   public Date getBirthday() {

      return birthday;

   }

   public void setBirthday(Date birthday) {

      this.birthday = birthday;

   }

}

package org.leno.export.util;

public class Book {

   private int bookId;

   private String name;

   private String author;

   private float price;

   private String isbn;

   private String pubName;

   private byte[] preface;

   public Book() {

      super();

   }

   public Book(int bookId, String name, String author, float price,

         String isbn, String pubName, byte[] preface) {

      super();

      this.bookId = bookId;

      this.name = name;

      this.author = author;

      this.price = price;

      this.isbn = isbn;

      this.pubName = pubName;

      this.preface = preface;

   }

   public int getBookId() {

      return bookId;

   }

   public void setBookId(int bookId) {

      this.bookId = bookId;

   }

   public String getName() {

      return name;

   }

   public void setName(String name) {

      this.name = name;

   }

   public String getAuthor() {

      return author;

   }

   public void setAuthor(String author) {

      this.author = author;

   }

   public float getPrice() {

      return price;

   }

   public void setPrice(float price) {

      this.price = price;

   }

   public String getIsbn() {

      return isbn;

   }

   public void setIsbn(String isbn) {

      this.isbn = isbn;

   }

   public String getPubName() {

      return pubName;

   }

   public void setPubName(String pubName) {

      this.pubName = pubName;

   }

   public byte[] getPreface() {

      return preface;

   }

   public void setPreface(byte[] preface) {

      this.preface = preface;

   }

}

上面这两个类一目了然,就是两个简单的javabean风格的类。再看下面真正的重点类:

package org.leno.export.util;

import java.io.*;

import java.lang.reflect.*;

import java.util.*;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import java.text.SimpleDateFormat;

import javax.swing.JOptionPane;

import org.apache.poi.hssf.usermodel.*;

import org.apache.poi.hssf.util.HSSFColor;

/**

 * 利用开源组件POI3.0.2动态导出EXCEL文档

 * 转载时请保留以下信息,注明出处!

 * @author leno

 * @version v1.0

 * @param <T> 应用泛型,代表任意一个符合javabean风格的类

 * 注意这里为了简单起见,boolean型的属性xxxget器方式为getXxx(),而不是isXxx()

 * byte[]jpg格式的图片数据

 */

public class ExportExcel<T> {

   public void exportExcel(Collection<T> dataset, OutputStream out) {

      exportExcel("测试POI导出EXCEL文档", null, dataset, out, "yyyy-MM-dd");

   }

   public void exportExcel(String[] headers, Collection<T> dataset,

         OutputStream out) {

      exportExcel("测试POI导出EXCEL文档", headers, dataset, out, "yyyy-MM-dd");

   }

   public void exportExcel(String[] headers, Collection<T> dataset,

         OutputStream out, String pattern) {

      exportExcel("测试POI导出EXCEL文档", headers, dataset, out, pattern);

   }

   /**

    * 这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上

    *

    * @param title

    *            表格标题名

    * @param headers

    *            表格属性列名数组

    * @param dataset

    *            需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的

    *            javabean属性的数据类型有基本数据类型及String,Date,byte[](图片数据)

    * @param out

    *            与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中

    * @param pattern

    *            如果有时间数据,设定输出格式。默认为"yyy-MM-dd"

    */

   @SuppressWarnings("unchecked")

   public void exportExcel(String title, String[] headers,

         Collection<T> dataset, OutputStream out, String pattern) {

      // 声明一个工作薄

      HSSFWorkbook workbook = new HSSFWorkbook();

      // 生成一个表格

      HSSFSheet sheet = workbook.createSheet(title);

      // 设置表格默认列宽度为15个字节

      sheet.setDefaultColumnWidth((short) 15);

      // 生成一个样式

      HSSFCellStyle style = workbook.createCellStyle();

      // 设置这些样式

      style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);

      style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

      style.setBorderBottom(HSSFCellStyle.BORDER_THIN);

      style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

      style.setBorderRight(HSSFCellStyle.BORDER_THIN);

      style.setBorderTop(HSSFCellStyle.BORDER_THIN);

      style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

      // 生成一个字体

      HSSFFont font = workbook.createFont();

      font.setColor(HSSFColor.VIOLET.index);

      font.setFontHeightInPoints((short) 12);

      font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

      // 把字体应用到当前的样式

      style.setFont(font);

      // 生成并设置另一个样式

      HSSFCellStyle style2 = workbook.createCellStyle();

      style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);

      style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

      style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);

      style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);

      style2.setBorderRight(HSSFCellStyle.BORDER_THIN);

      style2.setBorderTop(HSSFCellStyle.BORDER_THIN);

      style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);

      style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

      // 生成另一个字体

      HSSFFont font2 = workbook.createFont();

      font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);

      // 把字体应用到当前的样式

      style2.setFont(font2);

      // 声明一个画图的顶级管理器

      HSSFPatriarch patriarch = sheet.createDrawingPatriarch();

      // 定义注释的大小和位置,详见文档

      HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5));

      // 设置注释内容

      comment.setString(new HSSFRichTextString("可以在POI中添加注释!"));

      // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容.

      comment.setAuthor("leno");

      //产生表格标题行

      HSSFRow row = sheet.createRow(0);

      for (short i = 0; i < headers.length; i++) {

         HSSFCell cell = row.createCell(i);

         cell.setCellStyle(style);

         HSSFRichTextString text = new HSSFRichTextString(headers[i]);

         cell.setCellValue(text);

      }

      //遍历集合数据,产生数据行

      Iterator<T> it = dataset.iterator();

      int index = 0;

      while (it.hasNext()) {

         index++;

         row = sheet.createRow(index);

         T t = (T) it.next();

         //利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值

         Field[] fields = t.getClass().getDeclaredFields();

         for (short i = 0; i < fields.length; i++) {

            HSSFCell cell = row.createCell(i);

            cell.setCellStyle(style2);

            Field field = fields[i];

            String fieldName = field.getName();

            String getMethodName = "get"

                   + fieldName.substring(0, 1).toUpperCase()

                   + fieldName.substring(1);

            try {

                Class tCls = t.getClass();

                Method getMethod = tCls.getMethod(getMethodName,

                      new Class[] {});

                Object value = getMethod.invoke(t, new Object[] {});

                //判断值的类型后进行强制类型转换

                String textValue = null;

//              if (value instanceof Integer) {

//                 int intValue = (Integer) value;

//                 cell.setCellValue(intValue);

//              } else if (value instanceof Float) {

//                 float fValue = (Float) value;

//                 textValue = new HSSFRichTextString(

//                       String.valueOf(fValue));

//                 cell.setCellValue(textValue);

//              } else if (value instanceof Double) {

//                 double dValue = (Double) value;

//                 textValue = new HSSFRichTextString(

//                       String.valueOf(dValue));

//                 cell.setCellValue(textValue);

//              } else if (value instanceof Long) {

//                 long longValue = (Long) value;

//                 cell.setCellValue(longValue);

//              }

                if (value instanceof Boolean) {

                   boolean bValue = (Boolean) value;

                   textValue = "";

                   if (!bValue) {

                      textValue ="";

                   }

                } else if (value instanceof Date) {

                   Date date = (Date) value;

                   SimpleDateFormat sdf = new SimpleDateFormat(pattern);

                    textValue = sdf.format(date);

                } else if (value instanceof byte[]) {

                   // 有图片时,设置行高为60px;

                   row.setHeightInPoints(60);

                   // 设置图片所在列宽度为80px,注意这里单位的一个换算

                   sheet.setColumnWidth(i, (short) (35.7 * 80));

                   // sheet.autoSizeColumn(i);

                   byte[] bsValue = (byte[]) value;

                   HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,

                         1023, 255, (short) 6, index, (short) 6, index);

                   anchor.setAnchorType(2);

                   patriarch.createPicture(anchor, workbook.addPicture(

                         bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));

                } else{

                   //其它数据类型都当作字符串简单处理

                   textValue = value.toString();

                }

                //如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成

                if(textValue!=null){

                   Pattern p = Pattern.compile("^""d+("".""d+)?$");  

                  Matcher matcher = p.matcher(textValue);

                   if(matcher.matches()){

                      //是数字当作double处理

                      cell.setCellValue(Double.parseDouble(textValue));

                   }else{

                      HSSFRichTextString richString = new HSSFRichTextString(textValue);

                      HSSFFont font3 = workbook.createFont();

                      font3.setColor(HSSFColor.BLUE.index);

                      richString.applyFont(font3);

                      cell.setCellValue(richString);

                   }

                }

            } catch (SecurityException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            } catch (NoSuchMethodException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            } catch (IllegalArgumentException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            } catch (IllegalAccessException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            } catch (InvocationTargetException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            } finally {

                //清理资源

            }

         }

      }

      try {

         workbook.write(out);

      } catch (IOException e) {

         // TODO Auto-generated catch block

         e.printStackTrace();

      }

   }

   public static void main(String[] args) {

      // 测试学生

      ExportExcel<Student> ex = new ExportExcel<Student>();

      String[] headers = { "学号", "姓名", "年龄", "性别", "出生日期" };

      List<Student> dataset = new ArrayList<Student>();

      dataset.add(new Student(10000001, "张三", 20, true, new Date()));

      dataset.add(new Student(20000002, "李四", 24, false, new Date()));

      dataset.add(new Student(30000003, "王五", 22, true, new Date()));

      // 测试图书

      ExportExcel<Book> ex2 = new ExportExcel<Book>();

      String[] headers2 = { "图书编号", "图书名称", "图书作者", "图书价格", "图书ISBN",

            "图书出版社", "封面图片" };

      List<Book> dataset2 = new ArrayList<Book>();

      try {

         BufferedInputStream bis = new BufferedInputStream(

                new FileInputStream("book.jpg"));

         byte[] buf = new byte[bis.available()];

         while ((bis.read(buf)) != -1) {

            //

         }

         dataset2.add(new Book(1, "jsp", "leno", 300.33f, "1234567",

                "清华出版社", buf));

         dataset2.add(new Book(2, "java编程思想", "brucl", 300.33f, "1234567",

                "阳光出版社", buf));

         dataset2.add(new Book(3, "DOM艺术", "lenotang", 300.33f, "1234567",

                "清华出版社", buf));

         dataset2.add(new Book(4, "c++经典", "leno", 400.33f, "1234567",

                "清华出版社", buf));

         dataset2.add(new Book(5, "c#入门", "leno", 300.33f, "1234567",

                "汤春秀出版社", buf));

         OutputStream out = new FileOutputStream("E:""a.xls");

         OutputStream out2 = new FileOutputStream("E:""b.xls");

         ex.exportExcel(headers, dataset, out);

         ex2.exportExcel(headers2, dataset2, out2);

         out.close();

         JOptionPane.showMessageDialog(null, "导出成功!");

         System.out.println("excel导出成功!");

      } catch (FileNotFoundException e) {

         // TODO Auto-generated catch block

         e.printStackTrace();

      } catch (IOException e) {

         // TODO Auto-generated catch block

         e.printStackTrace();

      }

   }

}

不行,头有点晕^_^。呵呵,又是泛型,又是反射,又是正则表达式,又是重载,还有多参数列表和POI API。一下子蹦出来,实在让人吃不消。不管了,顶住看效果先。在本地运行后,我们发现在E:""下生成了两份excel文件:学生记录和图书记录,并且中文,数字,颜色,日期,图片等等一且正常。恩,太棒了。有人看到这里开始苦脸了:喂,我怎么一运行就报错啊!呵呵,看看什么错吧!哦,找不到文件,也就是说你没有book.jpg嘛。好,拷贝一张小巧的图书图片命名为book.jpg放置到当前工程下吧。注意,您千万别把张桌面大小的图片丢进去了^_^!看到效果了吧。现在我们再来简单梳理一下代码,实际上上面就做了一个导出excel的方法和一个本地测试main()方法。并且代码的结构也很清晰,只是涉及的知识点稍微多一点。大家细心看看注释,结合要完成的功能,应该没有太大问题的。好啦,吃杯茶,擦把汗,总算把这个类消化掉,你又进步了。咦,你不是说是在WEB环境下导出的吗?别急,因为导出就是一个下载的过程。我们只需要在服务器端写一个Jsp或者Servlet组件完成输出excel到浏览器客户端的工作就好了。我们以Servlet为例,还是看代码吧:

package org.leno.export.util;

import java.io.*;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 /**

 * @author leno

 * 使用servlet导出动态生成的excel文件,数据可以来源于数据库

 * 这样,浏览器客户端就可以访问该servlet得到一份用java代码动态生成的excel文件

 */

public class Export extends javax.servlet.http.HttpServlet{

   static final long serialVersionUID = 1L;

   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

      File file = new File(getServletContext().getRealPath("WEB-INF/book.jpg"));

      response.setContentType("octets/stream");

      response.addHeader("Content-Disposition", "attachment;filename=test.xls");

      //测试图书

      ExportExcel<Book> ex = new ExportExcel<Book>();

      String[] headers = { "图书编号", "图书名称", "图书作者", "图书价格", "图书ISBN",

            "图书出版社", "封面图片" };

      List<Book> dataset = new ArrayList<Book>();

      try {

         BufferedInputStream bis = new BufferedInputStream(

               new FileInputStream(file));

         byte[] buf = new byte[bis.available()];

         while ((bis.read(buf)) != -1) {

            //将图片数据存放到缓冲数组中

         }

         dataset.add(new Book(1, "jsp", "leno", 300.33f, "1234567",

                "清华出版社", buf));

         dataset.add(new Book(2, "java编程思想", "brucl", 300.33f, "1234567",

                "阳光出版社", buf));

         dataset.add(new Book(3, "DOM艺术", "lenotang", 300.33f, "1234567",

                "清华出版社", buf));

         dataset.add(new Book(4, "c++经典", "leno", 400.33f, "1234567",

                "清华出版社", buf));

         dataset.add(new Book(5, "c#入门", "leno", 300.33f, "1234567",

                "汤春秀出版社", buf));

         OutputStream out = response.getOutputStream();

         ex.exportExcel(headers, dataset, out);

         out.close();

         System.out.println("excel导出成功!");

      } catch (FileNotFoundException e) {

         // TODO Auto-generated catch block

         e.printStackTrace();

      } catch (IOException e) {

         // TODO Auto-generated catch block

         e.printStackTrace();

      }

   } 

   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

      doGet(request, response);

   }             

}

写完之后,如果您不是用eclipse工具生成的Servlet,千万别忘了在web.xml上注册这个Servelt。而且同样的,拷贝一张小巧的图书图片命名为book.jpg放置到当前WEB根目录的/WEB-INF/下。部署好web工程,用浏览器访问Servlet看下效果吧!是不是下载成功了。呵呵,您可以将下载到本地的excel报表用打印机打印出来,这样您就大功告成了。完事了我们就思考:我们发现,我们做的方法,不管是本地调用,还是在WEB服务器端用Servlet调用;不管是输出学生列表,还是图书列表信息,代码都几乎一样,而且这些数据我们很容器结合后台的DAO操作数据库动态获取。恩,类和方法的通用性和灵活性开始有点感觉了。好啦,祝您学习愉快!

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lenotang/archive/2008/08/24/2823230.aspx

posted @ 2010-11-24 09:32 David1228 阅读(1065) | 评论 (0)编辑 收藏
1.$。在jQuery 中$("<span>"),这个语法等同于$(document.createElement("span")) ,这是一种用法,在选择元素的时候还会这样子的用:[attribute$=value],匹配给定的属性是以某些值结尾的元素。下面举个例子来说明一下:
HTML代码
<input name="newsletter" />
<input name="milkman" />
<input name="jobletter" />

jQuery 代码:
$("input[name$='letter']")
结果:
[ <input name="newsletter" />, <input name="jobletter" /> ]
    2.!。选择器:[attribute!=value],匹配所有不含有指定的属性,或者属性不等于特定值的元素,此选择器等价于:not([attr=value])。

例子说明一下:
HTML代码
<input type="checkbox" name="newsletter" value="Hot Fuzz" />
<input type="checkbox" name="newsletter" value="Cold Fusion" />
<input type="checkbox" name="accept" value="Evil Plans" />
jQuery 代码:
$("input[name!='newsletter']").attr("checked", true);
结果:
[ <input type="checkbox" name="accept" value="Evil Plans" checked="true" /> ]
   3.*。选择器:[attribute*=value],匹配给定的属性是以包含某些值的元素。举个例子说明一下:
HTML 代码:
<input name="man-news" />
<input name="milkman" />
<input name="letterman2" />
<input name="newmilk" />

jQuery 代码:
$("input[name*='man']")
结果:
[ <input name="man-news" />, <input name="milkman" />, <input name="letterman2" /> ]
  4.@。匹配包含给定属性的元素。注意,在jQuery 1.3中,前导的@符号已经被废除!如果想要兼容最新版本,只需要简单去掉@符号即

可。
  5.^。选择器:[attribute^=value],匹配给定的属性是以某些值开始的元素,下面举个例子来说明一下:
HTML 代码:
<input name="newsletter" />
<input name="milkman" />
<input name="newsboy" />

jQuery 代码:
$("input[name^='news']")
结果:
[ <input name="newsletter" />, <input name="newsboy" /> ]

在jquery中,当使用$(”input[name='metaId']“).val()不能直接获得被选择的radio的值,只是获得 radio标签的第一个值,这可能jquery使用xpath语言了进行查找有关,而我们通常是想获得被选中的radio的值,有以下几种方法:

1,使用$(”input[name='metaId']:checked”).val()获得 //name代表radio中name属性名

2,使用$(”:radio:checked”).val()获得 //限制页面只有一组radio标签


posted @ 2010-11-18 14:35 David1228 阅读(1243) | 评论 (0)编辑 收藏
1、昨天的数据汇总
startday>=to_char(trunc($startday-1),'yyyyMMdd')
and startday <to_char(trunc($startday),'yyyyMMdd')
说明:$startday为时间标量 函数trunc($startday-10)用来求日期的前十天
函数to_char(trunc($startday-10),'yyyyMMdd')用来将求得日期以年月日的形式转化为char类型
2、最近十天的数据汇总
startday>=to_char(trunc($startday-10),'yyyyMMdd')
and startday <to_char(trunc($startday),'yyyyMMdd')
说明:$startday为时间标量 函数trunc($startday-10)用来求日期的前十天
函数to_char(trunc($startday-10),'yyyyMMdd')用来将求得日期以年月日的形式转化为char类型
二、月汇总例句
1、一个月数据汇总
startday>=to_char(trunc($startday,'mm'),'yyyyMMdd')
and startday <to_char(trunc(add_months($startday,1),'mm'),'yyyyMMdd')
说明:$startday为时间标量 函数trunc($startday,'mm')用来求日期所在月第一天
函数to_char(trunc($startday,'mm'),'yyyyMMdd')用来将求得日期所在月第一天以年月日的形式转化为char类型
2、一个月内任意时间段内的数据汇总
求日期所在月的五号到月末之前的四天的汇总
startday>=to_char(trunc($startday,'mm')+4,'yyyyMMdd')
and startday <to_char(trunc(add_months($startday,1),'mm')-4,'yyyyMMdd')
三、周汇总例句
1、一个周数据汇总
startday>=to_char(trunc($startday,'d')+1,'yyyyMMdd')
and startday <to_char(trunc($startday,'d')+8,'yyyyMMdd')
说明:$startday为时间标量 函数trunc($startday,'d')用来求日期所在周的第一天根据所在地区不同可能为周日或周一
函数to_char(trunc($startday,'d')+1,'yyyyMMdd')用来将求得日期以年月日的形式转化为char类型
说明一周的第一天为周日或者周一取决于你数据库的nls设置
select * from nls_session_parameters;
alter session set NLS_TERRITORY='AMERICA';
四、小时汇总例句
1、求前N个小时的数据汇总
startday=to_char($startday,'yyyyMMdd') and
starttime>=to_char(trunc($startday-N/24,'hh24'),'hh24')||'0000' and
starttime<to_char(trunc($startday,'hh24'),'hh24')||'0000'
说明:$startday为时间标量 函数to_char($startday,'yyyyMMdd')用来求日期以年月日的形式转化为char类型
函数to_char(trunc(sysdate-N/24,'hh24'),'hh24')用来将求得日期以24小时制的形式转化为char类型
posted @ 2010-09-19 14:03 David1228 阅读(540) | 评论 (0)编辑 收藏
2010-07-13

 

文章分类:数据库

SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计。Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献。可以这么说,Oracle中很多优化都是基于表空间的设计理念而实现的。

  典型应用一:控制用户所占用的表空间配额。

  在一些大型的数据库应用中,我们需要控制某个用户或者某一组用户其所占用的磁盘空间。这就好像在文件服务器中,需要为每个用户设置磁盘配额一样,以防止硬盘空间耗竭。所以,在数据库中,我们也需要限制用户所可以使用的磁盘空间大小。为了达到这个目的,我们就可以通过表空间来实现。

  我们可以在Oracle数据库中,建立不同的表空间,为其设置最大的存储容量,然后把用户归属于这个表空间。如此的话,这个用户的存储容量,就受到这个表空间大小的限制。

  典型应用二:控制数据库所占用的磁盘空间。

  有时候,在Oracle数据库服务器中,可能运行的不止一个服务。除了数据库服务器外,可能还有邮件服务器等应用系统服务器。为此,就需要先对Oracle数据库的磁盘空间作个规划,否则,当多个应用程序服务所占用的磁盘空间都无限增加时,最后可能导致各个服务都因为硬盘空间的耗竭而停止。所以,在同一台服务器上使用多个应用程序服务,我们往往需要先给他们进行磁盘空间的规划和分配。各个服务都不能够超过我们分配给他的最大限额,或者超过后及时的提醒我们。只有这样,才能够避免因为磁盘空间的耗竭而导致各种应用服务的崩溃。

  典型应用三:灵活放置表空间,提高数据库的输入输出性能。

  数据库管理员还可以将不同类型的数据放置到不同的表空间中,这样可以明显提高数据库输入输出性能,有利于数据的备份与恢复等管理工作。因为我们数据库管理员在备份或者恢复数据的时候,可以按表空间来备份数据。如在设计一个大型的分销系统后台数据库的时候,我们可以按省份建立表空间。与浙江省相关的数据文件放置在浙江省的表空间中,北京发生业务记录,则记录在北京这个表空间中。如此,当浙江省的业务数据出现错误的时候,则直接还原浙江省的表空间即可。很明显,这样设计,当某个表空间中的数据出现错误需要恢复的时候,可以避免对其他表空间的影响。

  另外,还可以对表空间进行独立备份。当数据库容量比较大的时候,若一下子对整个数据库进行备份,显然会占用比较多的时间。虽然说Oracle数据库支持热备份,但是在备份期间,会占用比较多的系统资源,从而造成数据库性能的下降。为此,当数据库容量比较大的时候,我们就需要进行设置多个表空间,然后规划各个表空间的备份时间,从而可以提高整个数据库的备份效率,降低备份对于数据库正常运行的影响。

  典型应用四:大表的排序操作。

  我们都知道,当表中的记录比较多的时候,对他们进行查询,速度会比较慢。第一次查询成功后,若再对其进行第二次重新排序,仍然需要这么多的时间。为此,我们在数据库设计的时候,针对这种容量比较大的表对象,往往把它放在一个独立的表空间,以提高数据库的性能。

  典型应用五:日志文件与数据文件分开放,提高数据库安全性。

  默认情况下,日志文件与数据文件存放在同一表空间。但是,这对于数据库安全方面来说,不是很好。所以,我们在数据库设计的过程中,往往喜欢把日志文件,特别是重做日志文件,放在一个独立的表空间中,然后把它存放在另外一块硬盘上。如此的话,当存放数据文件的硬盘出现故障时,能够马上通过存放在另一个表空间的重做日志文件,对数据库进行修复,以减少企业因为数据丢失所带来的损失。

  当然,表空间的优势还不仅仅这些,企业对于数据库的性能要求越高,或者数据库容量越大,则表空间的优势就会越大。

  下面,我们就具体来看看Oracle数据库中表空间的处理方式,看其在性能与安全性方面是否有足够的优势与SQL Server数据库抗衡。

  在数据库设计的时候,我们建议数据库管理员按如下顺序设置表空间。

第一步:建立表空间。

  在设计数据库的时候,首先需要设计表空间。我们需要考虑,是只建立一个表空间呢,还是需要建立多个表空间,以及各个表空间的存放位置、磁盘限额等等。

  到底设计多少个表空间合理,没有统一的说法,这主要根据企业的实际需求去判断。如企业需要对用户进行磁盘限额控制的,则就需要根据用户的数量来设置表空间。当企业的数据容量比较大,而其又对数据库的性能有比较高的要求时,就需要根据不同类型的数据,设置不同的表空间,以提高其输入输出性能。

  第二步:建立用户,并制定用户的默认表空间。

  在建立用户的时候,我们建议数据库管理员要指定用户的默认表空间。因为我们在利用CREATE语句创建数据库对象,如数据库表的时候,其默认是存储在数据库的当前默认空间。若不指定用户默认表空间的话,则用户每次创建数据库对象的时候,都要指定表空间,显然,这并不是很合理。

  另外要注意,不同的表空间有不同的权限控制。用户对于表空间A具有完全控制权限,可能对于表空间B就只有查询权限,甚至连连接的权限的都没有。所以,合理为用户配置表空间的访问权限,也是提高数据库安全性的一个方法。

posted @ 2010-09-13 21:49 David1228 阅读(1278) | 评论 (0)编辑 收藏
 

     jQuery插件

     随着jQuery的广泛使用,已经出现了大量jQuery插件,如thickboxiFXjQuery-googleMap等,简单的引用这些源文件就可以方便的使用这些插件。这里我简单的介绍一些网址供大家参考,这些网站头提供了大量的demo,并且使用及其简单,及时E文不好,也能快速掌握!
   
http://jquery.com/plugins     官方推荐
    http://interface.eyecon.ro/demos   
效果超级棒,使用更简单,一定有你喜欢的!
    http://www.dyve.net/jquery/
    http://bassistance.de/jquery-plugins

  
还有其它很多插件,大家可以google以下,如果大家发现好的了,可以留言共享以下!
   

    ——————————————————————————————————————————————


   
至此jQuery已经介绍完毕,并合并整理提供给大家 下载 ,更多详细的使用请大家参考官方网站,下面我再推荐一些jQuery的学习网站方便大家更好的掌握这项工具!
    http://keel.sike.googlepages.com/jQuery_getting_started.html    
中文入门介绍,Keel翻译
    http://jquery.com/api      jquery
提供全部基本方法的介绍及demo,方便大家查询!

posted @ 2010-09-02 14:17 David1228 阅读(250) | 评论 (0)编辑 收藏
仅列出标题
共16页: First 上一页 6 7 8 9 10 11 12 13 14 下一页 Last 

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(4)

随笔分类

随笔档案

文章档案

新闻分类

新闻档案

相册

收藏夹

Java

Linux知识相关

Spring相关

云计算/Linux/虚拟化技术/

友情博客

多线程并发编程

开源技术

持久层技术相关

搜索

  •  

积分与排名

  • 积分 - 356943
  • 排名 - 154

最新评论

阅读排行榜

评论排行榜