poi解析Excel,存入MySQL

今天做了一個poi解析Excel,導入數據庫的東東,還沒做完,整理下知識點。

1.首先是uuid

package com.mytest;

import java.util.UUID;

public class UTest {
    public static void main(String[] args) {
        UUID uuid = UUID.randomUUID();
        System.out.println(uuid);
    }
}

UUID是由一個十六位的數字組成,表現出來的形式例如 
550E8400-E29B-11D4-A716-446655440000  
//下面就是實現爲數據庫獲取一個唯一的主鍵id的代碼 
public class UUIDGenerator { 
    public UUIDGenerator() { 
    } 
    /** 
     * 獲得一個UUID 
     * @return String UUID 
     */ 
    public static String getUUID(){ 
        String s = UUID.randomUUID().toString(); 
        //去掉“-”符號 
        return s.substring(0,8)+s.substring(9,13)+s.substring(14,18)+s.substring(19,23)+s.substring(24); 
    } 
    /** 
     * 獲得指定數目的UUID 
     * @param number int 需要獲得的UUID數量 
     * @return String[] UUID數組 
     */ 
    public static String[] getUUID(int number){ 
        if(number < 1){ 
            return null; 
        } 
        String[] ss = new String[number]; 
        for(int i=0;i<number;i++){ 
            ss[i] = getUUID(); 
        } 
        return ss; 
    } 
    public static void main(String[] args){ 
        String[] ss = getUUID(10); 
        for(int i=0;i<ss.length;i++){ 
            System.out.println(ss[i]); 
        } 
    } 
}   
2.使用md5加密

所謂MD5,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2、MD3、MD4發展而來的一種單向函數算法(也就是HASH算法),它是國際著名的公鑰加密算法標準RSA的第一設計者R.Rivest於上個世紀90年代初開發出來的。MD5的最大作用在於,將不同格式的大容量文件信息在用數字簽名軟件來簽署私人密鑰前"壓縮"成一種保密的格式,關鍵之處在於——這種"壓縮"是不可逆的。
爲了讓讀者朋友對MD5的應用有個直觀的認識,筆者以一個比方和一個實例來簡要描述一下其工作過程:
大家都知道,地球上任何人都有自己獨一無二的指紋,這常常成爲公安機關鑑別罪犯身份最值得信賴的方法;與之類似,MD5就可以爲任何文件(不管其大小、格式、數量)產生一個同樣獨一無二的"數字指紋",如果任何人對文件做了任何改動,其MD5值也就是對應的"數字指紋"都會發生變化。
我們常常在某些軟件下載站點的某軟件信息中看到其MD5值,它的作用就在於我們可以在下載該軟件後,對下載回來的文件用專門的軟件(如Windows MD5 Check等)做一次MD5校驗,以確保我們獲得的文件與該站點提供的文件爲同一文件。利用MD5算法來進行文件校驗的方案被大量應用到軟件下載站、論壇數據庫、系統文件安全等方面。
筆者上面提到的例子只是MD5的一個基本應用,實際上MD5還被用於加密解密技術上,如Unix、各類BSD系統登錄密碼(在MD5誕生前採用的是DES加密算法,後因MD5安全性更高,DES被淘汰)、通信信息加密(如大家熟悉的即時通信軟件MyIM)、數字簽名等諸多方面。
MD5將任意長度的“字節串”變換成一個128bit的大整數,並且它是一個不可逆的字符串變換算法,換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數學原理上說,是因爲原始的字符串有無窮多個,這有點象不存在反函數的數學函數。
MD5的典型應用是對一段Message(字節串)產生fingerprint(指紋),以防止被“篡改”。舉個例子,你將一段話寫在一個叫 readme.txt文件中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現(兩個MD5值不相同)。如果再有一個第三方的認證機構,用MD5還可以防止文件作者的“抵賴”,這就是所謂的數字簽名應用。
MD5還廣泛用於加密和解密技術上,在很多操作系統中,用戶的密碼是以MD5值(或類似的其它算法)的方式保存的, 用戶Login的時候,系統是把用戶輸入的密碼計算成MD5值,然後再去和系統中保存的MD5值進行比較,而系統並不“知道”用戶的密碼是什麼。
public String makeMD5(String password) {   
MessageDigest md;   
   try {   
    // 生成一個MD5加密計算摘要   
    md = MessageDigest.getInstance("MD5");   
    // 計算md5函數   
    md.update(password.getBytes());   
    // digest()最後確定返回md5 hash值,返回值爲8爲字符串。因爲md5 hash值是16位的hex值,實際上就是8位的字符   
    // BigInteger函數則將8位的字符串轉換成16位hex值,用字符串來表示;得到字符串形式的hash值   
    String pwd = new BigInteger(1, md.digest()).toString(16);   
    System.err.println(pwd);   
    return pwd;   
   } catch (Exception e) {   
    e.printStackTrace();   
   }   
   return password;   
}

3.使用poi,來得到合併單元格的值
/**
  * 合併單元格處理,獲取合併行
  * @param sheet
  * @return List<CellRangeAddress>
  */
  public List<CellRangeAddress> getCombineCell(Sheet sheet)
  {
    List<CellRangeAddress> list = new ArrayList<CellRangeAddress>();
    //獲得一個 sheet 中合併單元格的數量
    int sheetmergerCount = sheet.getNumMergedRegions();
    //遍歷合併單元格
    for(int i = 0; i<sheetmergerCount;i++) 
    {
      //獲得合併單元格加入list中
      CellRangeAddress ca = sheet.getMergedRegion(i);
      list.add(ca);
    }
    return list;
  }
  /**
  * 判斷單元格是否爲合併單元格,是的話則將單元格的值返回
  * @param listCombineCell 存放合併單元格的list
  * @param cell 需要判斷的單元格
  * @param sheet sheet
  * @return
  */
  public String isCombineCell(List<CellRangeAddress> listCombineCell,Cell cell,Sheet sheet) throws Exception
  {
    int firstC = 0;
    int lastC = 0;
    int firstR = 0;
    int lastR = 0;
    String cellValue = null;
    for(CellRangeAddress ca:listCombineCell)
    {
      //獲得合併單元格的起始行, 結束行, 起始列, 結束列
      firstC = ca.getFirstColumn();
      lastC = ca.getLastColumn();
      firstR = ca.getFirstRow();
      lastR = ca.getLastRow();
      if(cell.getRowIndex() >= firstR && cell.getRowIndex() <= lastR) 
      {
        if(cell.getColumnIndex() >= firstC && cell.getColumnIndex() <= lastC) 
        {
          Row fRow = sheet.getRow(firstR);
          Cell fCell = fRow.getCell(firstC);
          cellValue = getCellValue(fCell);
          break;
        }
      }
      else
      {
        cellValue = "";
      }
    }
    return cellValue;
  }

4.補充上一個內容
得到所有的合併單元格 sourceSheet.getNumMergedRegions(); 得到某一個合併單元格 CellRangeAddress oldRange=sourceSheet.getMergedRegion(i); 起始行 oldRange.getFirstRow() ; 結束行oldRange.getLastRow() 起始列oldRange.getFirstColumn() 結束列oldRange.getLastColumn()
5.由於沒有做完,所以還會補充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章