工作中的tips~(一)

2016 9 25

html的table标签 不能正常的使用 display属性 需要该css效果最好是在table外面包一层div标签 或者是隐藏时改为 display:none 现实时要么把该值赋值为空 要么remove掉

2016 10 01

关于旧版本的myeclipse 开启tomcat的时候卡顿,一般有可能是内存问题,需要去设置,设置方法 网上都有就不过多阐述 如果设置后之后还是卡顿,一旦启动就卡顿或者启动后莫名其妙的突然卡顿,这种极有可能是输入法的剪切板导致的,如QQ拼音剪切板之类的。只需要关闭即可。

2016 10 11

instr函数在Oracle/PLSQL中是返回要截取的字符串在源字符串中的位置。instr是一个非常好用的字符串处理函数,几乎所有的字符串分隔都用到此函数。

2016 11 01

java中的特殊编译问题

Why can't I use \u000D and \u000A as CR and LF in Java?

public class Test1 {

	public static void main(String[] args) {
		if( false == true){ // \u000a\u007d\u007b
			System.out.println("false is true");
		}
		//等效于下面这句
		if( false == true){ // 
			}{
			System.out.println("false is true");
		}
	}
	
}

Unicode escapes are pre-processed before the compiler is run.
引用:http://stackoverflow.com/questions/3866187/why-cant-i-use-u000d-and-u000a-as-cr-and-lf-in-java

2016 11 23

tomcat隐藏地址,将web应用部署于webapps的root下 替换root下的index.html并且在里面做一个iframe的框 引入其他的地址 则可以做出隐藏url

2016 11 26

mybatis 的 <if test></if>
有时候会出现取不到值的问题,除却常见的使用map集合的时候,
使用了${}来取值,还有一种可能是单双引号问题引起的需要把 
<if  test="type=='1'"></if>  改为
<if  test='type=="1"'></if>

2017 12 01

iframe 自适应高度和宽度

<iframe src="${contextPath }/account/echarts.do" id="iframe" name="iframe_main" frameborder="0"  style="margin-left: -30px;" scrolling="no" onload="changeFrameHeight();"></iframe> 



$(function(){
			$("#menuwidth").resize(function(){
				var wwidth = document.body.clientWidth;
				var menuwidth = $("#menuwidth").width();
				var width = wwidth - menuwidth;
				var xx = $(".page-sidebar").width();
				$("#iframe").attr("width",width);	
			})
		})

		function test(){
			
			var wwidth = document.body.clientWidth;
			var menuwidth = $("#menuwidth").width();
			var width = wwidth - menuwidth;
				var xx = $(".page-sidebar").width();
			$("#iframe").attr("width",width);
			}

		function changeFrameHeight(){
		    var ifm= document.getElementById("iframe");
			var subWeb = document.frames ? document.frames["iframe"].document :
			ifm.contentDocument;
			if(ifm != null && subWeb != null) {
				ifm.height = subWeb.body.scrollHeight;
			}
		}
		
		window.onresize=function(){  
		     changeFrameHeight();  
		} 



2、若网页中只有而没有上面的一行代码,则JS脚本应该使用document.body
下面的是从网上找到的一点信息,希望对以后有点用处:
  在设计页面时可能经常会用到固定层的位置,这就需要获取一些html对象的坐标以更灵活的设置目标层的坐标,这里可能就会用到document.body.scrollTop等属性,但是此属性在xhtml标准网页或者更简单的说是带< !DOCTYPE..>标签的页面里得到的结果是0,如果不要此标签则一切正常,那么在xhtml页面怎么获得body的坐标呢,当然有办法-使用document.documentElement来取代document.body,可以这样写
例:
var top = document.documentElement.scrollTop || document.body.scrollTop;
在javascript里||是个好东西,除了能用在if等条件判断里,还能用在变量赋值上。那么上例等同于下例。
例:
var top = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
这么写可以得到很好的兼容性。
相反,如果不做声明的话,document.documentElement.scrollTop反而会显示为0。
得到各个属性如下:
网页可见区域宽: document.body.clientWidth;
网页可见区域高: document.body.clientHeight;
网页可见区域宽: document.body.offsetWidth (包括边线的宽);
网页可见区域高: document.body.offsetHeight (包括边线的宽);
网页正文全文宽: document.body.scrollWidth;
网页正文全文高: document.body.scrollHeight;
网页被卷去的高: document.body.scrollTop;
网页被卷去的左: document.body.scrollLeft;
网页正文部分上: window.screenTop;
网页正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的宽: window.screen.width;
屏幕可用工作区高度: window.screen.availHeight;
屏幕可用工作区宽度:window.screen.availWidth;
scrollHeight: 获取对象的滚动高度。
scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象的滚动宽度
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置
event.clientX 相对文档的水平座标
event.clientY 相对文档的垂直座标
event.offsetX 相对容器的水平坐标
event.offsetY 相对容器的垂直坐标
document.documentElement.scrollTop 垂直方向滚动的值
event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量
Post by molong on 2009-05-19 11:57 PM #1
要获取当前页面的滚动条纵坐标位置,用:
document.documentElement.scrollTop;
而不是:
document.body.scrollTop;
documentElement 对应的是 html 标签,而 body 对应的是 body 标签。
在标准w3c下,document.body.scrollTop恒为0,需要用document.documentElement.scrollTop来代替;
如果你想定位鼠标相对于页面的绝对位置时,你会发现google里面1000篇文章里面有999.99篇会让你使用event.clientX+document.body.scrollLeft,event.clientY+document.body.scrollTop,如果你发现你的鼠标定位偏离了你的想象,请不要奇怪,这是再正常不过的事情。
ie5.5之后已经不支持document.body.scrollX对象了。

2017 1 01

bootstrap的提示语 元素中加入以下属性

data-toggle="tooltip" data-placement="bottom" title="我是提示语"
js中加入
$("[data-toggle='tooltip']").tooltip();


//当调用 show 实例方法时立即触发该事件
$('#myTooltip').on('show.bs.tooltip', function () {
  // 执行一些动作...
})
//当提示工具对用户可见时触发该事件(将等待 CSS 过渡效果完成)
$('#myTooltip').on('shown.bs.tooltip', function () {
  // 执行一些动作...
})
//当调用 hide 实例方法时立即触发该事件
$('#myTooltip').on('hide.bs.tooltip', function () {
  // 执行一些动作...
})
//当提示工具对用户隐藏时触发该事件(将等待 CSS 过渡效果完成)
$('#myTooltip').on('hidden.bs.tooltip', function () {
  // 执行一些动作...
})

2017 1 24

这不是今天遇见的,而是今天又遇见了所以单独剔除来说说,在软件的设计上,实体bean的设计中,尽量所有属性多用String类型,而不是用long int 之类的,免得抛出转换异常的错误,尽量在代码的层面上做好健壮性上

2017年3月20日 14:51:02

  1. 关于restful架构 过滤器跳转,防止在iframe页面显示login信息
out.print(" <script>window.open('" + req.getContextPath() + "/login.html','_parent'); </script>");

2017年3月24日

excel 导出的流的方式,传统url容易出错

/**
	 * * 统一导出 可选导出2003及2007版本excel,默认为2003,如需2007 则调用时传入excelVersion=excel2007
	 * 
	 * @param excelVersion
	 *            默认为null
	 * @param request
	 * @param session
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("unifyDownloadResult")
	public String unifyDownloadResult(String excelVersion,
			HttpServletRequest request, HttpSession session,
			HttpServletResponse response) throws Exception {
		// XSSFWorkbook workbook = new XSSFWorkbook();
		List<OrderByField> titleList = (List<OrderByField>) session.getAttribute("excelTitle");
		String excelSql = (String) session.getAttribute("excelSql");
		List<Map<String, Object>> resultList = sysService
				.findForExcel(excelSql(excelSql));
		// 创建excel父类
		Workbook wb = null;
		// 版本判断
		if (excelVersion != null) {
			wb = (XSSFWorkbook) ExcelExport.exportExcel2007(titleList,
					resultList);
		} else {
			wb = (HSSFWorkbook) ExcelExport.exportExcel(titleList, resultList);
		}
		// 输入下载文件名
		String fileName = "excel报表." + (excelVersion != null ? "xlsx" : "xls");
		// 讲excel文件写出
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		wb.write(os);
		byte[] content = os.toByteArray();
		InputStream is = new ByteArrayInputStream(content);
		// 设置响应头
		response.reset();
		response.setContentType("application/vnd.ms-excel;charset=utf-8");
		response.setHeader("Content-Disposition", "attachment;filename="
				+ new String((fileName).getBytes(), "iso-8859-1"));
		ServletOutputStream out = response.getOutputStream();
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		try {
			bis = new BufferedInputStream(is);
			bos = new BufferedOutputStream(out);
			byte[] buff = new byte[2048];
			int bytesRead;
			// Simple read/write loop.
			while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
				bos.write(buff, 0, bytesRead);
			}
		} catch (final IOException e) {
			throw e;
		} finally {
			if (bis != null)
				bis.close();
			if (bos != null)
				bos.close();
		}

		return null;
	}

2017年4月10日

oracle的批量导入如果有序列 需要触发器

-- 批量语句 和mysql不一样 oracle9.0后拥有
insert all into AMS_ASSET_INFO(ASSETID,DEVSNO,ASSETNO)          values  (SEQ_AMS_ASSET.NEXTVAL,'tesetasfas1131','teset1asdas311')  
into AMS_ASSET_INFO(ASSETID,DEVSNO,ASSETNO)          values  (SEQ_AMS_ASSET.NEXTVAL,'teset11asdasf41','tesetasdg1411')  
into AMS_ASSET_INFO(ASSETID,DEVSNO,ASSETNO)          values  (SEQ_AMS_ASSET.NEXTVAL,'teset11xcv1','teset15zxc11')  
select 1 from dual

-- 触发器
create or replace trigger ams_asset_info_insert  
  before insert on AMS_ASSET_INFO    
  for each row    
declare  

begin    
  
  select SEQ_AMS_ASSET.nextval into :new.ASSETID from dual;  
end ams_asset_info_insert ;


mybatis 语句
<insert id="importDeviceList" parameterType="java.util.List">
        insert all into
        <foreach collection="list" item="item" index="index"  separator="into">
        AMS_ASSET_INFO(ASSETID,DEVSNO,ASSETNO,STATUS,DOMAIN,VENDOR,STATUSTIME,OPERTIME) values
        (SEQ_AMS_ASSET.NEXTVAL,#{item.deviceid},#{item.device_sequence},#{item.state_id},#{item.dept_id},
		#{item.device_vendor},to_date(#{item.oper_time},'yyyy-MM-dd hh24:mi:ss'),to_date(#{item.storage_time},'yyyy-MM-dd hh24:mi:ss'))
        </foreach>
       select 1 from dual
    </insert>

2017年4月11日 15:10:27

oracle的模糊查询优化

instr(title,'模糊')>0  相当于  title like '%模糊%'

instr(title,'模糊')=1  相当于  title like '模糊%'

instr(title,'模糊')=0  相当于  title not like '%模糊%'

我们项目数据库中:
select count(*) from AMS_ASSET_INFO t where  instr(t.devsno,'CLF')>0  ;


select count(*) from AMS_ASSET_INFO t where t.devsno like '%CLF%' ;

使用instr 明显效率比like提升不少

特殊用法:

 

select   id, name from users where instr('101914, 104703', id) > 0; 
  它等价于 
select   id, name from users where id = 101914 or id = 104703;

 

 

 

使用Oracle的instr函数与索引配合提高模糊查询的效率

一般来说,在Oracle数据库中,我们对tb表的name字段进行模糊查询会采用下面两种方式:
1.select * from tb where name like '%XX%';
2.select * from tb where instr(name,'XX')>0;

若是在name字段上没有加索引,两者效率差不多,基本没有区别。

为提高效率,我们在name字段上可以加上非唯一性索引:
create index idx_tb_name on tb(name);

这样,再使用

select * from tb where instr(name,'XX')>0;

这样的语句查询,效率可以提高不少,表数据量越大时两者差别越大。但也要顾及到name字段加上索引后DML语句会使索引数据重新排序的影响。

关于oracle like模糊查询的优化

总结:
1)后面有%号,CBO默认可以走index
2)前面有%号,通过create index idx_xx on tab(reverse(xx)),然后sql 改写为如下:
   改写前:
   select * from test where owner like '%SCOTT'
   改写后:
   select * from test where reverse(owner) like reverse('%SCOTT');
3) 前后都有%,创建新表保存原表的like列和rowid,然后通过rowid关联查询,然后sql改写如下:
   改写前:
   select * from test where owner like '%SCOTT%';
   改写后:
   select 原表.* from 新表 t1 join 原表 t2 on t1.rid = t2.rowid where 新表.owner like '%SCOTT%';

2017年4月27日 11:23:23

restful架构 html 缓存

<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="0"> 
<meta http-equiv="Cache-Control" content="no-siteapp" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值