Java

pager-taglib 中 页码的算法

如 int totalCount =  记录总数; int itemCountForPage =  每页记录数; 那么 int pageCount= totalCount / itemCountForPage + (totalCount % itemCountForPage == 0 ? 0 : 1); // 页数 int offset =  (pageCount- 1) * itemCountForPage ;  //在URL里作为参数pager.offset的值

csvJdbc的基本用法

http://csvjdbc.sourceforge.net 如果第一列用作表头,而在sql里又直接且“select * ”,则表头的任意两列都不能重名 connection的可选属性 http://octopus.objectweb.org/doc/3.2-2/extras/Csvjdbc_readme.html 其中,最重要的是 props.put("suppressHeaders","true"); // first line contains data 也就是说,如果suppressHeaders为true,则CVS无列名,第一行就是数据;;否则,CSV第一行是表头,数据从第二行开始。这个选项的默认值是false,也就是说默认数据从第二行开始 还有几个属性: separator Used to specify a different column separator (Default is ‘,’). fileExtension Used to specify a different file extension (Default is ".csv") charset Used to specify a different than default charset encoding of input file (default is same VM default …

csvJdbc的基本用法 Read More »

AppFuse 1.9.3 一个奇怪问题: 换了用户之后,看到的菜单项仍和原来看到的一样

估计是缓存的问题,待研究 已经可以排除以下原因:    1.退出时session没有置为无效    2.IE缓存里存放了菜单的源码    3.Appfuse中的userCache设置    最终的成功解决办法:   将struts-menu版本升级到 2.4.3,并将cssHorizontalMenu.vm 和 cssVerticalMenu.vm替换为 appFuse2.0中的版本。    因为struts-menu的官方主页说了 :All users are encouraged to upgrade to at least 2.4.2 as some major performance and security issues were solved in this release. Most of them only affect folks using the VelocityDisplayer.),  

extremeTable比displayTag好用

跟displayTag相比,有下列优点:   1.提供表内搜索功能,不需要手工开发搜索程序   2.排序时是整表排序,而不是像displayTag那样只能页内排序  

不要直接重用DB Connection

Connection每次用时最好重新建一下,用完之后销毁 否则,很容易导致死锁 除非你用了数据库连接池(连接池保证睡眠中的Connection是“干净”的)

树型表结构的查询优化

    一个对象在业务逻辑上是一棵树,那它在数据库里就是由若干个表通过外键关联组成的树。 如何从数据库中取出这棵树?     比较优雅的做法是采用先序遍历的办法:先从树根表读出树根,在JAVA世界变成树根Bean,然后用同样的办法读出它的子树,再把子树BEAN设置为树根的属性。   这种做法优雅是优雅,但是速度慢,因为查一次,就要跟数据库服务器连一次,就要增加一次数据库IO。这是不行的。即使用了数据库连接池,开销还是很大    为了减少网络开销,应该先将数据从数据库中一次性取出,然后拿到JAVA世界中进行拆解。这样速度可以明显改善,代价是编程麻烦。 在数据库端要写一个存储过程,先读出树根记录到一个临时表,然后再将子树表逐个与该临时表连接,查出子树记录放入子树临时表,然后再将“孙”树表。。。,最后返回各个临时表的记录集。  在JAVA程序这边,还要用原始的JDBC语句一步一步地处理这种多重结果集,然后又一个一个地拆解

文件传输过程中的读写锁问题

1.从FTP下载文件未完时    目标文件可读    目标文件不可写 2.WINOWS本地拷贝文件未完时    目标文件的内容不可读("另一个程序正在使用此文件,进程无法访问。"),但是文件的最后修改时间可读    目标文件不可写 3.用FileInputStream和FileOutputStream在Windows本地拷贝时    目标文件可读    目标文件不可写 4.用Runtime.exec("cp.bat"),其中cp.bat=copy xx yy     目标文件不可读    目标文件不可写