posts - 15, comments - 20, trackbacks - 0, articles - 6
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2009年11月24日

       刚开始使用new HSSFWorkbook(new FileInputStream(excelFile))来读取Workbook,对Excel2003以前(包括2003)的版本没有问题,但读取Excel2007时发生如下异常:
org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

        该错误意思是说,文件中的数据是用Office2007+XML保存的,而现在却调用OLE2 Office文档处理,应该使用POI不同的部分来处理这些数据,比如使用XSSF来代替HSSF。

        于是按提示使用XSSF代替HSSF,用new XSSFWorkbook(excelFile)来读取Workbook,对Excel2007没有问题了,可是在读取Excel2003以前(包括2003)的版本时却发生了如下新异常(真是太悲剧了):
org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: '*.xls'
        该错误是说,操作无效,不能打开指定的xls文件。

        下载POI的源码后进行单步调试,发现刚开始的时候还是对的,但到ZipFile类后就找不到文件了,到网上查了下,原来是XSSF不能读取Excel2003以前(包括2003)的版本,这样的话,就需要在读取前判断文件是2003前的版本还是2007的版本,然后对应调用HSSF或XSSF来读取。
        这是初步的想法,但这种做法比较麻烦,看了下API,发现XSSF和HSSF虽然在不同的包里,但却引用了同一接口Workbook,于是想到了这样的读取方法:
        Workbook book = null;
        try {
            book = new XSSFWorkbook(excelFile);
        } catch (Exception ex) {
            book = new HSSFWorkbook(new FileInputStream(excelFile));
        }
        在各版本的Excel中测试,没有发生异常,问题解决。

posted @ 2011-03-16 16:17 spinage 阅读(12682) | 评论 (1)编辑 收藏

   最近遇到了request.getRemoteAddr()获取的值为0:0:0:0:0:0:0:1,这是为什么呢,照道理讲,应该是127.0.0.1才对,为什么这个获取的值变成了ipv6了呢,而且我发现这种情况只有在服务器和客户端都在同一台电脑上才会出现(例如用localhost访问的时候才会出现,用127.0.0.1不会出现),后来上网查了查原因,原来是/etc/hosts这个东西作怪(在windows上应该是C:\Windows\system32\drivers\etc\ hosts这个文件),只需要注释掉文件中的 # ::1 localhost 这一行即可解决问题。另外localhost这个文件很有用,这里你可以添加自己的条目,例如添加 192.168.0.111 buyer.com这样子,在浏览器中原来只能使用192.168.0.111来访问的,并可以使用 buyer.com来进行替换。

posted @ 2011-03-16 16:08 spinage 阅读(934) | 评论 (1)编辑 收藏

假设当前已执行:select * from tab;

   (a)ppend 添加文本到缓冲区当前行尾

       例: SQL>a  order by tname

  结果:select * from tab order by tname;

  (注:a后面跟2个空格)

  (c)hange/old/new 在当前行用新的文本替换旧的文本

  例:SQL>c/*/tname

  结果:select tname from tab;

  (c)hange/text 从当前行删除文本

  例:SQL>c/tab

  结果:select tname from ;

   del 删除当前行

    del n 删除第n行 

  (i)nput 文本 在当前行之后添加一行 

  (l)ist 显示缓冲区中所有行 

  (l)ist n 显示缓冲区中第 n 行 

  (l)ist m n 显示缓冲区中 m 到 n 行

  (r)un 执行当前缓冲区的命令

  /  执行当前缓冲区的命令

  @文件名 运行调入内存的sql文件

     例:SQL> edit s<回车>

  如果当前目录下不存在s.sql文件,则系统自动生成s.sql文件,

  在其中输入“select * from tab;”,存盘退出。

  SQL> @s<回车>

    系统会自动查询当前用户下的所有表、视图、同义词。

      @@文件名 在.sql文件中调用另一个.sql文件时使用

      例:SQL>edit test<回车>

           在其中输入"@s",存盘退出。(这里s为上例中创建的sql文件)

           SQL>@@test<回车>

           结果就是执行了文件s.sql中的语法:自动查询当前用户下的所有表、视图、同义词。

  save 文件名             将缓冲区的命令以文件方式存盘,缺省文件扩展名为.sql

  get 文件名           调入存盘的sql文件

  start 文件名         运行调入内存的sql文件

  spool 文件名        把这之后的各种操作及执行结果“假脱机”即存盘到磁盘文件上,默认文件扩展名为.lst

    spool                 显示当前的“假脱机”状态

    spool off            停止输出

  例:

  SQL> spool a

  SQL> spool

  正假脱机到 A.LST

  SQL> spool off

  SQL> spool

  当前无假脱机

  exit             退出SQL*PLUS

  desc 表名     显示表的结构

  show user     显示当前连接用户

  show error    显示错误

  show all       显示所有68个系统变量值

  edit                打开默认编辑器,Windows系统中默认是notepad.exe,把缓冲区中最后一条SQL语句调入afiedt.buf文件中进行编辑

    edit 文件名   把当前目录中指定的.sql文件调入编辑器进行编辑

   clear screen   清空当前屏幕显示

posted @ 2010-04-06 16:04 spinage 阅读(315) | 评论 (0)编辑 收藏

关于在MyEclipseWEB工程里面的JS/JSP经常会有语法错误提示,这是由于MyEclipse对其语法要求相当严格所造成的,而这些文件本身是可以运行并没有什么错误的,在你实际应用部署中并无影响.

此问题解决办法有两种:

一、就是您不用去管它提示,直接部署到你的WEB容器上运行是可以的,但此方法欠妥当。

二、选择你的工程右击菜单——>点击MyEclipse菜单项的Exclude From Validation,如果你的工程里还有其它需要它检验其合法性建议可以针对某一文件夹或具体文件进行此项操作,这样可以只针对WEB工程里的某一个文件夹里面的JSP/JS文件来进行验证排除,这样就不会对这些被排除的文件或文件夹进行验证了,不过再你打开这些文件时,文件里面是有错误提示的,但工程是不会出现语法错误提示的。这样不仅解决了工程总提示语法信息错误的烦恼,对于一些确实存在问题的文件也可以查看其错误问题所在,可谓一举两得。

另外还可以通过使用Remove All Validation Markers此菜单项进移除所有的验证语法错误提示信息。

posted @ 2010-04-06 13:29 spinage 阅读(2345) | 评论 (2)编辑 收藏

Tomcat:
IOException while loading persisted sessions: java.io.EOFException解决

严重: IOException while loading persisted sessions: java.io.EOFException
严重: Exception loading sessions from persistent storage

原因是tomcat对硬盘的session读取失败,彻底解决办法一下:将work下面的文件清空,主要是*.ser文件,或者只是删除掉session.ser即可以解决。

posted @ 2010-03-24 09:57 spinage 阅读(234) | 评论 (0)编辑 收藏

eclipse 无法启动 JVM terminated. Exit code=-1
eclipse.ini中内存设置过大的问题,以前我修改过内存设置,一直都好好的,之前eclipse.ini的配置如下:

 

-showsplash
com.genuitec.myeclipse.product
--launcher.XXMaxPermSize
512m
-vmargs
-Xms256m
-Xmx512m
-Duser.language=en
-XX:PermSize=256M
-XX:MaxPermSize=512M

现在修改了一下,-Xms256m改成-Xms128m,把Xmx512m  改为 Xmx256m,结果还真的好了,没想到居然是这样的小问题引起来的。

====================================================================================

第二个,我们的项目采用svn管理,查找.svn,把所有.svn的文件删除

第三个,查看项目根文件夹下的.metadata,发现.metadata下面差很多插件,把现有项目的.metadate覆盖进去即可

 

posted @ 2010-01-26 09:12 spinage 阅读(335) | 评论 (0)编辑 收藏

 

1、建立组合索引,但查询谓词并未使用组合索引的第一列,此处有一个INDEX SKIP SCAN概念。
2、在包含有null值的table列上建立索引,当时使用select count(*) from table时不会使用索引。
3、在索引列上使用函数时不会使用索引,如果一定要使用索引只能建立函数索引。
4、当被索引的列进行隐式的类型转换时不会使用索引。如:select * from t where indexed_column = 5,而indexed_column列建立索引但类型是字符型,这时Oracle会产生
隐式的类型转换,转换后的语句类似于select * from t where to_number(indexed_column) = 5,此时不走索引的情况类似于case3。日期转换也有类似问题,如:
select * from t where trunc(date_col) = trunc(sysdate)其中date_col为索引列,这样写不会走索引,可改写成select * from t where date_col >= trunc(sysdate)
and date_col < trunc(sysdate+1),此查询会走索引。
5、并不是所有情况使用索引都会加快查询速度,full scan table 有时会更快,尤其是当查询的数据量占整个表的比重较大时,因为full scan table采用的是多块读,
当Oracle优化器没有选择使用索引时不要立即强制使用,要充分证明使用索引确实查询更快时再使用强制索引。

6、<>

7、like’%dd’百分号在前

8、not in ,not exist. 

posted @ 2010-01-14 15:16 spinage 阅读(2028) | 评论 (0)编辑 收藏

利用pinyin4j开源的一个小项目取中文首字母
 
public static String getAllFirstLetter(String str) {
  String convert = "";
  for (int j = 0; j < str.length(); j++) {
   char word = str.charAt(j);
   String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
   if (pinyinArray != null) {
    convert += pinyinArray[0].charAt(0);
   } else {
    convert += word;
   }
  }
  return convert;
 }

posted @ 2009-11-27 10:30 spinage 阅读(863) | 评论 (0)编辑 收藏

 在许多开源的框架中都充分的利用了设计模式这一概念,Struts典型的MVC模式的化身,Spring是工厂模式和单例模式的充分体现。在项目开发中,能充分利用设计模式的思想来考虑问题,来解决问题,来通过代码去实现。不但可以提高代码的质量,对程序的扩展,重用带来很大方便。其实我们项目中用设计模式编程就是加了一个封装层,减少客户必须处理的对象的数量。

 在设计模式中一般都遵循这样的原则:
      (1)按接口编程。
      (2)尽量用聚合代替继承。
      (3)找出变化并封装之。
     上面主要讲了一些设计模式的作用和原则。接下来是我对门面模式的一个简单理解。Facade(门面模式)是美国著名的四人帮(GOF)写的23种模式之一。
       简单的理解:我们需要用一种比原有的方法更简单的方法与系统交互,或者说,我们需要以一种特殊的方式使用系统。主要是为子系统中的一组接口提供一个统一的接口。Facade模式定义了一个更高的接口,使子系统更加容易使用。它的意图要求一个一致的高层接口。

posted @ 2009-11-27 10:25 spinage 阅读(296) | 评论 (0)编辑 收藏

序列化机制只保存对象的类型信息,属性的类型信息和属性值,和方法没有什么关系,你就是给这个类增加10000个方法,序列化内容也不会增加任何东西。

posted @ 2009-11-24 11:01 spinage 阅读(201) | 评论 (0)编辑 收藏