springMVC导入报表,uuid使用,poi解析导入MySQL

来源:互联网 发布:手机事件提醒软件 编辑:程序博客网 时间:2024/06/06 08:43

今天继续昨天未完成工作,已经完工。

下面总结下我遇到的问题

1.使用springMVC上传文件,获得流以及条件,代码如下,

jsp部分代码

<h1>Please upload a file</h1>  <!--   enctype(编码格式)必须为multipart/form-data  -->          <form method="post" action="../manager/test.do" enctype="multipart/form-data">              <input type="text" name="name"/>              <input type="file" name="file"/>              <input type="submit"/>          </form>              
java后台接收代码

/** * @Title: test * @Description: TODO 初始化员工信息 * @author wuxiaolong */@RequestMapping(value = "/test",method = RequestMethod.POST)public ModelAndView initStaffInfo(@RequestParam("file") MultipartFile myfile, HttpServletRequest request){System.out.println("进入");return viewReportAssessmentOrderService.initUploadStaff(myfile ,request);} 
需要注意的是

①@RequestParam注解 要加上,否则获取不到参数

②要修改servlet-context.xml,加上

    <!--  这里申明的id必须为multipartResolver  -->      <bean id="multipartResolver"          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">                <!-- one of the properties available; the maximum file size in bytes -->          <property name="maxUploadSize" value="100000"/>      </bean>  

CommonsMultipartResolver允许设置的属性有:
    defaultEncoding:表示用来解析request请求的默认编码格式,当没有指定的时候根据Servlet规范会使用默认值ISO-8859-1。当request自己指明了它的编码格式的时候就会忽略这里指定的defaultEncoding。
    uploadTempDir:设置上传文件时的临时目录,默认是Servlet容器的临时目录。
    maxUploadSize:设置允许上传的最大文件大小,以字节为单位计算。当设为-1时表示无限制,默认是-1。
    maxInMemorySize:设置在文件上传时允许写到内存中的最大值,以字节为单位计算,默认是10240。

这篇文章写的很好http://haohaoxuexi.iteye.com/blog/1188116

附送jsp上传的demo    http://blog.csdn.net/lookthesea/article/details/1617633

2.poi解析合并单元格,兵获取它的值

由于合并单元格后,假设为A1-A5为合并后的单元格,此时可以获取A1的值,但A2-A5的值为null

我写了一个方法,自动判断单元格是否为合并的并返回它实际的值,参考代码,

下面代码中首先通过最后一个方法得到

List<CellRangeAddress> rangeList
,int i 是读取的行数。

/** * @Title: 获得单元格的值,如果是合并单元格的话有相应处理 * @Description: TODO * @author wuxiaolong * @param sheet * @param rangeList * @param i * @return */public String getRangeValue(Sheet sheet,List<CellRangeAddress> rangeList,int i){Boolean flag=this.isCombineCell(rangeList, sheet.getRow(i).getCell(1), sheet);if(flag){return this.getMergedRegionValue(sheet, i,1);}return null;}/*** 判断单元格是否为合并单元格* * @param listCombineCell*            存放合并单元格的list* @param cell*            需要判断的单元格* @param sheet*            sheet* @return*/public  Boolean isCombineCell(List<CellRangeAddress> listCombineCell,Cell cell, Sheet sheet) {int firstC = 0;int lastC = 0;int firstR = 0;int lastR = 0;for (CellRangeAddress ca : listCombineCell) {// 获得合并单元格的起始行, 结束行, 起始列, 结束列firstC = ca.getFirstColumn();lastC = ca.getLastColumn();firstR = ca.getFirstRow();lastR = ca.getLastRow();if (cell.getColumnIndex() <= lastC&& cell.getColumnIndex()>= firstC) {if (cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR) {return true;}}}return false;}/** * @Title: 获取合并单元格的值  * @Description: TODO * @author wuxiaolong * @param sheet * @param row * @param column * @return */public String getMergedRegionValue(Sheet sheet, int row, int column) { int sheetMergeCount = sheet.getNumMergedRegions(); for (int i = 0; i < sheetMergeCount; i++) { CellRangeAddress ca = sheet.getMergedRegion(i); int firstColumn = ca.getFirstColumn(); int lastColumn = ca.getLastColumn(); int firstRow = ca.getFirstRow(); int lastRow = ca.getLastRow(); if (row >= firstRow && row <= lastRow) { if (column >= firstColumn && column <= lastColumn) { Row fRow = sheet.getRow(firstRow); Cell fCell = fRow.getCell(firstColumn); return getCellFormatValue(fCell); } } } return null; }/**   * 合并单元格处理,获取合并行   * @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;    }  

3.我在java后台生成一个uuid序列号,如果要存入的字段在数据库中是主键,那么uuid会自动改写,就是你在java后台获得的不是实际存入数据库的,这时如果有外键关联的话,先生成uuid,然后使用dao.add(entity);返回entity.getUUID即可,再操作关联字段。

uuid关键代码

本来搜到一个很不多的文章,没收藏,大家自己百度吧,很多

mysql 里面可以用uuid()语句来生成一个UUID:

select uuid();
或 select replace(uuid(), '-', '');

直接在insert语句中插入UUID作主键的用法(简便):

insert into Price( Name, UUID, Price, BID) values('FEIFEI_TEST', uuid(), 32, 3);

 

UUID
UUID含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份。
  UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的 UUID,即是微软的 Microsoft’s Globally Unique Identifiers (GUIDs),而其他重要的应用,则有 Linux ext2/ext3 档案系统、LUKS 加密分割区、GNOME、KDE、Mac OS X 等等。
  是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字
  UUID由以下几部分的组合:
  (1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
  (2)时钟序列
  (3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
  UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函数很简单的生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12),可以从cflib 下载CreateGUID() UDF进行转换。
  使用UUID的好处在分布式的软件系统中(比如:DCE/RPC, COM+,CORBA)就能体现出来,它能保证每个节点所生成的标识都不会重复,并且随着WEB服务等整合技术的发展,UUID的优势将更加明显。根据使用的特定机制,UUID不仅需要保证是彼此不相同的,或者最少也是与公元3400年之前其他任何生成的通用惟一标识符有非常大的区别。
  通用惟一标识符还可以用来指向大多数的可能的物体。微软和其他一些软件公司都倾向使用全球惟一标识符(GUID),这也是通用惟一标识符的一种类型,可用来指向组建对象模块对象和其他的软件组件。第一个通用惟一标识符是在网罗计算机系统(NCS)中创建,并且随后成为开放软件基金会(OSF)的分布式计算环境(DCE)的组件。
以上摘自http://baike.baidu.com/view/1052579.htm



0 0
原创粉丝点击