﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Java剪辑</title><link>http://www.blogjava.net/bang/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 12:20:52 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 12:20:52 GMT</pubDate><ttl>60</ttl><item><title>如何在JSP页面中调用Spring容器注入的Bean？ </title><link>http://www.blogjava.net/bang/archive/2013/08/08/402560.html</link><dc:creator>邦</dc:creator><author>邦</author><pubDate>Thu, 08 Aug 2013 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/bang/archive/2013/08/08/402560.html</guid><wfw:comment>http://www.blogjava.net/bang/comments/402560.html</wfw:comment><comments>http://www.blogjava.net/bang/archive/2013/08/08/402560.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bang/comments/commentRss/402560.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bang/services/trackbacks/402560.html</trackback:ping><description><![CDATA[<div><ol start="1"><li><span>&lt;%&nbsp;&nbsp;</span></li><li>WebApplicationContext&nbsp;context&nbsp;=&nbsp;(WebApplicationContext)<span>this.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);&nbsp;&nbsp;</span></li><li>TestService&nbsp;service&nbsp;=&nbsp;(TestService)context.getBean(<span>"testService");&nbsp;&nbsp;</span></li><li>%&gt;&nbsp; <br /></li></ol></div><img src ="http://www.blogjava.net/bang/aggbug/402560.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bang/" target="_blank">邦</a> 2013-08-08 14:48 <a href="http://www.blogjava.net/bang/archive/2013/08/08/402560.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PowerDesigner导出表到word</title><link>http://www.blogjava.net/bang/archive/2012/09/24/388452.html</link><dc:creator>邦</dc:creator><author>邦</author><pubDate>Mon, 24 Sep 2012 10:12:00 GMT</pubDate><guid>http://www.blogjava.net/bang/archive/2012/09/24/388452.html</guid><wfw:comment>http://www.blogjava.net/bang/comments/388452.html</wfw:comment><comments>http://www.blogjava.net/bang/archive/2012/09/24/388452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bang/comments/commentRss/388452.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bang/services/trackbacks/388452.html</trackback:ping><description><![CDATA[<div id="cnblogs_post_body">
<p>一、模版修改</p>
<p>在导出表时，powerdesigner默认为我们提供了很多的模版，在工具栏中选择【Report---&gt;Report Template】即可看到所有的默认模版。如图一：</p>
<p style="line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px"><img style="border-right-width: 0px; display: block; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" alt="" src="http://pic002.cnblogs.com/images/2011/28023/2011042411203164.png" /></p>
<p style="text-align: center; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">图一 模版列表</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">这里我们为了导出powerdesigner中创建的表，在工具栏中选择【Report---&gt;Reports】(快捷键Ctrl+E),然后创建一个New Report<img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="" src="http://pic002.cnblogs.com/images/2011/28023/2011042411283030.png" />,如下图二所以，选择Standard Physical Report，这里选择的标准的模版，点击OK确定。</p>
<p style="text-align: center; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="" src="http://pic002.cnblogs.com/images/2011/28023/2011042411303988.png" /></p>
<p style="text-align: center; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">图二 创建新的Report</p>
<p style="text-align: center; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">从工具栏【Report---&gt;Print Preview】或者点击图标<img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="" src="http://pic002.cnblogs.com/images/2011/28023/2011042411342378.png" />同样可以预览导出到word的效果了。效果如图三所示：</p>
<p style="text-align: center; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="" src="http://pic002.cnblogs.com/images/2011/28023/2011042411374536.png" /></p>
<p style="text-align: center; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">图三 导出到word中预览效果</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">从【图三】中的工具栏里面HTM和RTF两种导出格式。如果导出到word选择RTF格式即可，但是我们从【图三】中看出红色标出的部分，1 是word的页眉，同样还有页脚信息 ，2 是一些列的属性清单。</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　<img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="" src="http://pic002.cnblogs.com/images/2011/28023/2011042416230480.png" /></p>
<p style="text-align: center; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">图四 设置页眉、页脚</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">在【图四】中，选择Header/Footer后，删掉Header里面的%MODULE%<span> </span>%MODELNAME%，删掉Footer里面的%APPNAME%<span> </span>%DATE%<span> </span>页数 %PAGE%，User_defined footer就会自动勾上，这样就去掉了页眉、页脚了</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">&nbsp;</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">还有其他的比如表前面的自增序号，第一页中的创建者、版本、日期信息也不需要，我们可以进行配置去掉，如下【图五】【图六】</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　<img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="" src="http://pic002.cnblogs.com/images/2011/28023/2011042416134922.jpg" /></p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">&nbsp;&nbsp;　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　图四&nbsp;</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">　<img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="" src="http://pic002.cnblogs.com/images/2011/28023/2011042416145314.png" width="400" height="314" /><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="" src="http://pic002.cnblogs.com/images/2011/28023/2011042416181529.png" width="346" height="200" /><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="" src="http://pic002.cnblogs.com/images/2011/28023/2011042416482015.png" width="300" height="117" /></p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　图五&nbsp;Properties配置</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">在图五中，在默认配置中(General)勾上No paragraph numbering即可取消表前面的自增序号，在Title Page中选择 No Title Page就不会生成第一页中关于创建者、版本、日期等信息。</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">在【图三】中，预览看到的内容太多，就必须删除一些我们不需要的内容，经过删减之后，如下【图六】所示</p>
<p style="text-align: center; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="" src="http://pic002.cnblogs.com/images/2011/28023/2011042416345746.png" /></p>
<p style="text-align: center; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">图六&nbsp;</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">在【图六】中右键单击【List of Table Columns - 表&lt;%PARENT%&gt;列说明】，从菜单中选择 Edit Title...，就可以编辑成现在我们已看到的。然后，在右键菜单中选择Layout...，选择我们所需要显示的内容,Code表示列名称，一般用英文单词或拼音字母表示，Name一般用中文描述，Data Type 表示数据类型，Comment表示字段备注或字段说明等。</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">到此基本上已经完成了powerdesigner模版的修改</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">二、导出表</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">然后点击[Report----&gt;Generate RTF]导出到word中，最后我们看看导出到word的效果，如下图：</p>
<p style="text-align: center; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="" src="http://pic002.cnblogs.com/images/2011/28023/2011042416524854.png" /></p>
<p style="text-align: center; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">图七 导出到word效果</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">三、保存模版</p>
<p style="text-align: left; line-height: 18px; text-indent: 0px; margin: 5px auto; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px">&nbsp;&nbsp; &nbsp; &nbsp;通过上文，我们完成了自己所需的模版，然后就保存，以后可以直接使用即可，在工具栏中[Report---&gt;Create Template From Section]，然后Ctrl+S就会要求保存，取名保存即可。</p></div><img src ="http://www.blogjava.net/bang/aggbug/388452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bang/" target="_blank">邦</a> 2012-09-24 18:12 <a href="http://www.blogjava.net/bang/archive/2012/09/24/388452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven3应用入门讲座</title><link>http://www.blogjava.net/bang/archive/2012/08/22/386004.html</link><dc:creator>邦</dc:creator><author>邦</author><pubDate>Wed, 22 Aug 2012 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/bang/archive/2012/08/22/386004.html</guid><wfw:comment>http://www.blogjava.net/bang/comments/386004.html</wfw:comment><comments>http://www.blogjava.net/bang/archive/2012/08/22/386004.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bang/comments/commentRss/386004.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bang/services/trackbacks/386004.html</trackback:ping><description><![CDATA[
<script>setTimeout((function(){
(function(sogouExplorer){
if (sogouExplorer == undefined) return;
sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});
//alert("content script stop js loaded "+document.location);
if (typeof comSogouWwwStop == "undefined"){
	
	var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&";
	
	window.comSogouWwwStop = true;
	
	setTimeout(function(){ 
		if (!document.location || document.location.toString().indexOf(SERVER) != 0){
			return;
		}
		
		function bind(elem, evt, func){
			if (elem){
				return elem.addEventListener?elem.addEventListener(evt,func,false):elem.attachEvent("on"+evt,func);
			}
		}

		function storeHint() {
			var hint = new Array(); 
			var i = 0; 
			var a = document.getElementById("hint_" + i);
			var b = document.getElementById("hint_text_" + i);
			var storeClick = function(){sogouExplorer.extension.sendRequest({cmd: "click"});}
			while(a && b) {
				bind(a, "click", storeClick);
				hint.push({"text":b.innerHTML, "url":a.href});
				i++;
				a = document.getElementById("hint_" + i);
				b = document.getElementById("hint_text_" + i);
			}
			return hint;
		}
		
		if (document.getElementById("windowcloseit")){			
			document.getElementById("windowcloseit").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "closeit"});
			}
			var flag = false;
			document.getElementById("bbconfig").onclick = function(){
				flag = true;
				sogouExplorer.extension.sendRequest({cmd: "config"});
				return false;
			}
			document.body.onclick = function(){
				if (flag) {
					flag = false;
				} else {
					sogouExplorer.extension.sendRequest({cmd: "closeconfig"});
				}
			};/*
			document.getElementById("bbhidden").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "hide"});
				return false;
			}		*/
			var sogoutip = document.getElementById("sogoutip");
			var tip = {};
			tip.word = sogoutip.innerHTML;
			tip.config = sogoutip.title.split(",");
			var hint = storeHint();
			sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}});
		}else{
			if (document.getElementById("windowcloseitnow")){
				sogouExplorer.extension.sendRequest({cmd: "closeit", data: true});
			}
		}
	}, 1);
	
}



})(window.external.sogouExplorer(window,-1709349363));
}), 10);</script>
&nbsp;<a href="/Files/bang/Maven3应用入门讲座.pptx">/Files/bang/Maven3应用入门讲座.pptx</a><img src ="http://www.blogjava.net/bang/aggbug/386004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bang/" target="_blank">邦</a> 2012-08-22 10:31 <a href="http://www.blogjava.net/bang/archive/2012/08/22/386004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven工程中如何引入sql server 2008 驱动jar包</title><link>http://www.blogjava.net/bang/archive/2012/08/02/384617.html</link><dc:creator>邦</dc:creator><author>邦</author><pubDate>Thu, 02 Aug 2012 07:55:00 GMT</pubDate><guid>http://www.blogjava.net/bang/archive/2012/08/02/384617.html</guid><wfw:comment>http://www.blogjava.net/bang/comments/384617.html</wfw:comment><comments>http://www.blogjava.net/bang/archive/2012/08/02/384617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bang/comments/commentRss/384617.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bang/services/trackbacks/384617.html</trackback:ping><description><![CDATA[
<script>setTimeout((function(){
(function(sogouExplorer){
if (sogouExplorer == undefined) return;
sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});
//alert("content script stop js loaded "+document.location);
if (typeof comSogouWwwStop == "undefined"){
	
	var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&";
	
	window.comSogouWwwStop = true;
	
	setTimeout(function(){ 
		if (!document.location || document.location.toString().indexOf(SERVER) != 0){
			return;
		}
		
		function bind(elem, evt, func){
			if (elem){
				return elem.addEventListener?elem.addEventListener(evt,func,false):elem.attachEvent("on"+evt,func);
			}
		}

		function storeHint() {
			var hint = new Array(); 
			var i = 0; 
			var a = document.getElementById("hint_" + i);
			var b = document.getElementById("hint_text_" + i);
			var storeClick = function(){sogouExplorer.extension.sendRequest({cmd: "click"});}
			while(a && b) {
				bind(a, "click", storeClick);
				hint.push({"text":b.innerHTML, "url":a.href});
				i++;
				a = document.getElementById("hint_" + i);
				b = document.getElementById("hint_text_" + i);
			}
			return hint;
		}
		
		if (document.getElementById("windowcloseit")){			
			document.getElementById("windowcloseit").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "closeit"});
			}
			var flag = false;
			document.getElementById("bbconfig").onclick = function(){
				flag = true;
				sogouExplorer.extension.sendRequest({cmd: "config"});
				return false;
			}
			document.body.onclick = function(){
				if (flag) {
					flag = false;
				} else {
					sogouExplorer.extension.sendRequest({cmd: "closeconfig"});
				}
			};/*
			document.getElementById("bbhidden").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "hide"});
				return false;
			}		*/
			var sogoutip = document.getElementById("sogoutip");
			var tip = {};
			tip.word = sogoutip.innerHTML;
			tip.config = sogoutip.title.split(",");
			var hint = storeHint();
			sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}});
		}else{
			if (document.getElementById("windowcloseitnow")){
				sogouExplorer.extension.sendRequest({cmd: "closeit", data: true});
			}
		}
	}, 1);
	
}



})(window.external.sogouExplorer(window,-1709349363));
}), 10);</script>
用jTDS通过JDBC连：<br />&lt;dependency&gt;<br />&lt;groupId&gt;net.sourceforge.jtds&lt;/groupId&gt;<br />&lt;artifactId&gt;jtds&lt;/artifactId&gt;<br />&lt;version&gt;1.2.4&lt;/version&gt;<br />&lt;/dependency&gt;<br /><br />
<p>public static List&lt;String&gt; executeQuery(String sql,String columns) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection conn = getConnection();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Statement st = conn.createStatement();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResultSet set = st.executeQuery(sql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&lt;String&gt; result = new ArrayList&lt;String&gt;();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (set.next()) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] columnList = columns.split(",");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(String str:columnList){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.add(set.getString(str));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; st.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (SQLException e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IllegalArgumentException(e);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public static Connection getConnection() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class.forName("net.sourceforge.jtds.jdbc.Driver");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String url = "jdbc:jtds:sqlserver://localhost:1433;DatabaseName=jdl";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String username = "sa";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String password = "";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection conn = DriverManager.getConnection(url, username,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return conn;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IllegalArgumentException(e);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</p><img src ="http://www.blogjava.net/bang/aggbug/384617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bang/" target="_blank">邦</a> 2012-08-02 15:55 <a href="http://www.blogjava.net/bang/archive/2012/08/02/384617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE6 中文乱码</title><link>http://www.blogjava.net/bang/archive/2012/07/11/382815.html</link><dc:creator>邦</dc:creator><author>邦</author><pubDate>Wed, 11 Jul 2012 09:01:00 GMT</pubDate><guid>http://www.blogjava.net/bang/archive/2012/07/11/382815.html</guid><wfw:comment>http://www.blogjava.net/bang/comments/382815.html</wfw:comment><comments>http://www.blogjava.net/bang/archive/2012/07/11/382815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bang/comments/commentRss/382815.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bang/services/trackbacks/382815.html</trackback:ping><description><![CDATA[在js中的url进行encodeURIComponent编码：dd_ddtj_sub.jsp?shrxm="+encodeURIComponent(shrxm1)+"&amp;lxdh="+encodeURIComponent(lxdh1)<br />后台service进行encode编码和decode解码：shrxm= java.net.URLEncoder.encode(shrxm, "UTF-8");<br />&nbsp;&nbsp;shrxm= java.net.URLDecoder.decode(shrxm,"UTF-8"); <img src ="http://www.blogjava.net/bang/aggbug/382815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bang/" target="_blank">邦</a> 2012-07-11 17:01 <a href="http://www.blogjava.net/bang/archive/2012/07/11/382815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows安装MongoDB </title><link>http://www.blogjava.net/bang/archive/2012/07/10/382705.html</link><dc:creator>邦</dc:creator><author>邦</author><pubDate>Tue, 10 Jul 2012 05:24:00 GMT</pubDate><guid>http://www.blogjava.net/bang/archive/2012/07/10/382705.html</guid><wfw:comment>http://www.blogjava.net/bang/comments/382705.html</wfw:comment><comments>http://www.blogjava.net/bang/archive/2012/07/10/382705.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bang/comments/commentRss/382705.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bang/services/trackbacks/382705.html</trackback:ping><description><![CDATA[<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; color: #333333; font-size: 10.5pt; font-weight: normal; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold" lang="EN-US">1)</span></strong><strong><span style="font-family: 宋体; color: #333333; font-size: 10.5pt; font-weight: normal; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">、下载<span lang="EN-US">MongoDB<br /></span></span></strong><span style="color: #555555; font-size: 10.5pt" lang="EN-US">http://downloads.mongodb.org/win32/mongodb-win32-i386-2.0.4.zip<O:P></O:P></span></p>
<p style="line-height: 21pt; margin: 0cm 0cm 0pt;background: #f8f8f8"><strong><span style="font-family: 宋体; color: #333333; font-size: 10.5pt; font-weight: normal; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold" lang="EN-US">2)</span></strong><strong><span style="font-family: 宋体; color: #333333; font-size: 10.5pt; font-weight: normal; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">、设置<span lang="EN-US">MongoDB</span>目录</span></strong><strong><span style="color: #333333; font-size: 10.5pt" lang="EN-US"><O:P></O:P></span></strong></p>
<p style="line-height: 21pt; text-indent: 21pt; margin: 7.5pt 0cm;background: #f8f8f8"><span style="color: #333333; font-size: 10.5pt">将其解压到<span lang="EN-US"> d:\</span>，再重命名为<span lang="EN-US">mongodb</span>，路径为<span lang="EN-US">d:\mongodb<O:P></O:P></span></span></p>
<p style="line-height: 21pt; margin: 0cm 0cm 0pt;background: #f8f8f8"><strong><span style="font-family: 宋体; color: #333333; font-size: 10.5pt; font-weight: normal; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold" lang="EN-US">3)</span></strong><strong><span style="font-family: 宋体; color: #333333; font-size: 10.5pt; font-weight: normal; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">、设置数据文件路径</span></strong><strong><span style="color: #333333; font-size: 10.5pt" lang="EN-US"><O:P></O:P></span></strong></p>
<p style="line-height: 21pt; text-indent: 21pt; margin: 7.5pt 0cm;background: #f8f8f8"><span style="color: #333333; font-size: 10.5pt">在<span lang="EN-US">d:</span>盘建一个<span lang="EN-US">data</span>文件夹，在<span lang="EN-US">data</span>文件夹中新建<span lang="EN-US">db</span>文件夹，路径<span lang="EN-US">d:\data\db<O:P></O:P></span></span></p>
<p style="line-height: 21pt; margin: 0cm 0cm 0pt;background: #f8f8f8"><strong><span style="font-family: 宋体; color: #333333; font-size: 10.5pt; font-weight: normal; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold" lang="EN-US">4)</span></strong><strong><span style="font-family: 宋体; color: #333333; font-size: 10.5pt; font-weight: normal; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">、启动<span lang="EN-US">MongoDB</span>服务</span></strong><strong><span style="color: #333333; font-size: 10.5pt" lang="EN-US"><O:P></O:P></span></strong></p>
<p style="line-height: 21pt; text-indent: -31.5pt; margin: 7.5pt 0cm 7.5pt 36.75pt;background: #f8f8f8; mso-para-margin-top: 7.5pt; mso-para-margin-right: 0cm; mso-para-margin-bottom: 7.5pt; mso-para-margin-left: .5gd; mso-char-indent-count: -3.0"><span style="color: #333333; font-size: 10.5pt">进入<span lang="EN-US"> cmd </span>提示符控制台，<span lang="EN-US"><br />D:\mongodb\bin\mongod.exe --dbpath=d:\data\db<O:P></O:P></span></span></p><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">1.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt">&nbsp; </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">2.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt">&nbsp; </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54 warning: 32-bit servers don't have journaling enabled by def<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">3.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt">&nbsp; </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">ault. Please use --journal if you want durability.<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">4.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt">&nbsp; </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">5.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt">&nbsp; </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54 [initandlisten] MongoDB starting :</span><span style="font-family: 'Courier New'; color: red; font-size: 9pt" lang="EN-US"> pid=5084</span><span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US"> </span><span style="font-family: 'Courier New'; color: red; font-size: 9pt" lang="EN-US">port=27017</span><span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US"> dbpat<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">6.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt">&nbsp; </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">h=</span><span style="font-family: 'Courier New'; color: red; font-size: 9pt" lang="EN-US">d:\data\db</span><span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US"> 32-bit host=PC-201012302214<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">7.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt">&nbsp; </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54 [initandlisten]<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">8.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt">&nbsp; </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54 [initandlisten] ** NOTE: when using MongoDB 32 bit, you are<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">9.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt">&nbsp; </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">limited to about 2 gigabytes of data<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">10.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt"> </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54 [initandlisten] **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; see http://blog.mongodb.org/post/13<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">11.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt"> </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">7788967/32-bit-limitations<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">12.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt"> </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54 [initandlisten] **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; with --journal, the limit is lower<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">13.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt"> </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54 [initandlisten]<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">14.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt"> </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54 [initandlisten] db version v2.0.4, pdfile version 4.5<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">15.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt"> </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54 [initandlisten] git version: 329f3c47fe8136c03392c8f0e548506<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">16.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt"> </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">cb21f8ebf<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">17.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt"> </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54 [initandlisten] build info: windows sys.getwindowsversion(ma<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">18.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt"> </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">jor=6, minor=0, build=6002, platform=2, service_pack='Service Pack 2') BOOST_LIB<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">19.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt"> </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">_VERSION=1_42<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">20.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt"> </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54 [initandlisten] options: { dbpath: "d:\data\db" }<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">21.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt"> </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54 [websvr] admin web console waiting for connections on port 2<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">22.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt"> </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">8017<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">23.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt"> </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">Mon Apr 16 08:50:54 [initandlisten] waiting for connections on port 27017<O:P></O:P></span></pre>
<p style="line-height: 21pt; text-indent: 42pt; margin: 7.5pt 0cm;background: #f8f8f8; mso-char-indent-count: 4.0"><span style="color: #333333; font-size: 10.5pt" lang="EN-US">MongoDB</span><span style="color: #333333; font-size: 10.5pt">服务端的默认连接端口<span lang="EN-US">:27017<O:P></O:P></span></span></p>
<p style="line-height: 21pt; text-indent: 21pt; margin: 0cm 0cm 0pt;background: #f8f8f8"><strong><span style="font-family: 宋体; color: #333333; font-size: 10.5pt; font-weight: normal; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold" lang="EN-US">5)</span></strong><strong><span style="font-family: 宋体; color: #333333; font-size: 10.5pt; font-weight: normal; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">、将<span lang="EN-US">MongoDB</span>作为<span lang="EN-US"> Windows </span>服务随机启动</span></strong><strong><span style="color: #333333; font-size: 10.5pt" lang="EN-US"><O:P></O:P></span></strong></p>
<p style="line-height: 21pt; text-indent: 21pt; margin: 7.5pt 0cm;background: #f8f8f8"><span style="color: #333333; font-size: 10.5pt">先创建<span lang="EN-US">D:\mongodb\logs\mongodb.log</span>文件，用于存储<span lang="EN-US">MongoDB</span>的日志文件<span lang="EN-US">, </span>再安装系统服务：<span lang="EN-US"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">D:\mongodb\bin\mongod&nbsp;</span><span style="color: #5c5c5c" lang="EN-US">--dbpath</span><span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">=d:\data\db&nbsp;</span><span style="color: #5c5c5c" lang="EN-US">--logpath</span><span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">=</span><span style="color: #5c5c5c" lang="EN-US">d</span><span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">:\mongodb\log</span><span style="color: #333333; font-size: 10.5pt" lang="EN-US"><O:P></O:P></span></p><pre style="line-height: 13.5pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">s\mongodb.log&nbsp;--install &nbsp;&nbsp;<O:P></O:P></span></pre><pre style="line-height: 13.5pt; margin-left: 31.5pt; mso-para-margin-left: 3.0gd; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">all&nbsp;output&nbsp;going&nbsp;to:&nbsp;d:\mongodb\logs\mongodb.log &nbsp;<br /> Creating&nbsp;service&nbsp;MongoDB. &nbsp;<br /> Service&nbsp;creation&nbsp;successful. &nbsp;<br /> Service&nbsp;can&nbsp;be&nbsp;started&nbsp;from&nbsp;the&nbsp;command&nbsp;line&nbsp;via&nbsp;'net&nbsp;start&nbsp;"MongoDB"'. <br /> D:\&gt;net&nbsp;start&nbsp;mongodb &nbsp;<br /> Mongo&nbsp;DB&nbsp;</span><span style="color: #5c5c5c; font-size: 9pt; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">服务已经启动成功。</span><span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US"> &nbsp;<br /> D:&gt;&nbsp;<O:P></O:P></span></pre><pre style="line-height: 13.5pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span style="color: #5c5c5c; font-size: 9pt; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">注意：如果需要卸载服务，执行命令：</span><span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">sc delete MongoDB<O:P></O:P></span></pre>
<p style="line-height: 21pt; text-indent: 21pt; margin: 0cm 0cm 0pt;background: #f8f8f8"><strong><span style="font-family: 宋体; color: #333333; font-size: 10.5pt; mso-bidi-font-family: 宋体" lang="EN-US">6)</span></strong><strong><span style="font-family: 宋体; color: #333333; font-size: 10.5pt; mso-bidi-font-family: 宋体">、客户端连接验证</span></strong><span style="color: #333333; font-size: 10.5pt" lang="EN-US"><O:P></O:P></span></p>
<p style="line-height: 21pt; text-indent: 21pt; margin: 7.5pt 0cm;background: #f8f8f8"><span style="color: #333333; font-size: 10.5pt">新打开一个<span lang="EN-US">CMD</span>输入：<span lang="EN-US">d:\mongodb\bin\mongo</span>，如果出现下面提示，那么您就可以开始<span lang="EN-US">MongoDB</span>之旅了：<span lang="EN-US"><O:P></O:P></span></span></p><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">1.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt">&nbsp; </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">d:\mongodb\bin\mongo &nbsp;<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">2.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt">&nbsp; </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">MongoDB&nbsp;shell&nbsp;version:&nbsp;2.0.4 &nbsp;<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">3.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt">&nbsp; </span></span>&lt;!--[endif]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">connecting&nbsp;to:&nbsp;test &nbsp;<O:P></O:P></span></pre><pre style="line-height: 13.5pt; text-indent: -18pt; margin-left: 56.25pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2">&lt;!--[if !supportLists]--&gt;<span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt; mso-fareast-font-family: 'Courier New'" lang="EN-US">4.<span style="line-height: normal; font-family: 'Times New Roman'; font-size: 7pt">&nbsp; </span></span>&lt;!--[endif]--&gt;<span class="tag"><strong><span style="border-bottom-color: windowtext; padding-bottom: 0cm; border-right-width: 1pt; border-top-color: windowtext; padding-left: 0cm; padding-right: 0cm; font-family: 'Courier New'; border-top-width: 1pt; border-bottom-width: 1pt; color: #006699; border-right-color: windowtext; font-size: 9pt; border-left-color: windowtext; border-left-width: 1pt; padding-top: 0cm; mso-border-alt: none windowtext 0cm" lang="EN-US">&gt;</span></strong></span><span style="font-family: 'Courier New'; color: #5c5c5c; font-size: 9pt" lang="EN-US">&nbsp;<O:P></O:P></span></pre>
<p style="line-height: 21pt; text-indent: 21pt; margin: 0cm 0cm 0pt;background: #f8f8f8"><strong><span style="font-family: 宋体; color: #333333; font-size: 10.5pt; mso-bidi-font-family: 宋体" lang="EN-US">7)</span></strong><strong><span style="font-family: 宋体; color: #333333; font-size: 10.5pt; mso-bidi-font-family: 宋体">、查看<span lang="EN-US">MongoDB</span>日志</span></strong><span style="color: #333333; font-size: 10.5pt" lang="EN-US"><O:P></O:P></span></p>
<p style="line-height: 21pt; text-indent: 21pt; margin: 7.5pt 0cm;background: #f8f8f8"><span style="color: #333333; font-size: 10.5pt">查看<span lang="EN-US">D:\mongodb\logs\mongodb.log</span>文件，即可对<span lang="EN-US">MongoDB</span>的运行情况进行查看或排错。</span></p><img src ="http://www.blogjava.net/bang/aggbug/382705.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bang/" target="_blank">邦</a> 2012-07-10 13:24 <a href="http://www.blogjava.net/bang/archive/2012/07/10/382705.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript onmouseout问题解决方案</title><link>http://www.blogjava.net/bang/archive/2012/05/03/377292.html</link><dc:creator>邦</dc:creator><author>邦</author><pubDate>Thu, 03 May 2012 08:08:00 GMT</pubDate><guid>http://www.blogjava.net/bang/archive/2012/05/03/377292.html</guid><wfw:comment>http://www.blogjava.net/bang/comments/377292.html</wfw:comment><comments>http://www.blogjava.net/bang/archive/2012/05/03/377292.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bang/comments/commentRss/377292.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bang/services/trackbacks/377292.html</trackback:ping><description><![CDATA[
<script>setTimeout((function(){
(function(sogouExplorer){
if (sogouExplorer == undefined) return;
sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});
//alert("content script stop js loaded "+document.location);
if (typeof comSogouWwwStop == "undefined"){
	
	var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&";
	
	window.comSogouWwwStop = true;
	
	setTimeout(function(){ 
		if (!document.location || document.location.toString().indexOf(SERVER) != 0){
			return;
		}
		
		function bind(elem, evt, func){
			if (elem){
				return elem.addEventListener?elem.addEventListener(evt,func,false):elem.attachEvent("on"+evt,func);
			}
		}

		function storeHint() {
			var hint = new Array(); 
			var i = 0; 
			var a = document.getElementById("hint_" + i);
			var b = document.getElementById("hint_text_" + i);
			var storeClick = function(){sogouExplorer.extension.sendRequest({cmd: "click"});}
			while(a && b) {
				bind(a, "click", storeClick);
				hint.push({"text":b.innerHTML, "url":a.href});
				i++;
				a = document.getElementById("hint_" + i);
				b = document.getElementById("hint_text_" + i);
			}
			return hint;
		}
		
		if (document.getElementById("windowcloseit")){			
			document.getElementById("windowcloseit").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "closeit"});
			}
			var flag = false;
			document.getElementById("bbconfig").onclick = function(){
				flag = true;
				sogouExplorer.extension.sendRequest({cmd: "config"});
				return false;
			}
			document.body.onclick = function(){
				if (flag) {
					flag = false;
				} else {
					sogouExplorer.extension.sendRequest({cmd: "closeconfig"});
				}
			};/*
			document.getElementById("bbhidden").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "hide"});
				return false;
			}		*/
			var sogoutip = document.getElementById("sogoutip");
			var tip = {};
			tip.word = sogoutip.innerHTML;
			tip.config = sogoutip.title.split(",");
			var hint = storeHint();
			sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}});
		}else{
			if (document.getElementById("windowcloseitnow")){
				sogouExplorer.extension.sendRequest({cmd: "closeit", data: true});
			}
		}
	}, 1);
	
}



})(window.external.sogouExplorer(window,-1709349363));
}), 10);</script>

<div id="blog_text" class="cnt">
<p>方案一:</p>
<div style="margin: 15px">
<p>希望实现 当鼠标离开一个DIV的时候触发一个事件处理函数 于是用onmouseout 结果却发现它的触发是不是也太敏感了 原因现在也没有弄清楚 IE下好像是因为区分mouseout时的fromElement还是toElement ，IE 5.5以上的onmouseleave事件就比较好用 偏FF又不支持这个事件 只有自己想办法手工判断了。 <br />
<table style="border-bottom: #999 1px solid; border-left: #999 1px solid; width: 80%; font-size: 12px; border-top: #999 1px solid; border-right: #999 1px solid" class="FCK__ShowTableBorders" border="0" align="center">
<tbody>
<tr>
<td>&lt;SCRIPT&gt;<br />/***<br />* 参数e 是对象传递的触发事件 FF下想访问event对象必须传递event参数<br />* 参数o 是目标DIV对象<br />*/&nbsp;&nbsp; <br />function fun(e,o) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* FF 下判断鼠标是否离开DIV */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(window.navigator.userAgent.indexOf("Firefox")&gt;=1) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var x = e.clientX + document.body.scrollLeft;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var y = e.clientY + document.body.scrollTop ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var left = o.offsetLeft;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var top = o.offsetTop;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var w = o.offsetWidth;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var h = o.offsetHeight;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(y &lt; top || y &gt; (h + top) || x &gt; left + w || x&lt;left ) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("mouseout");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* IE */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(o.contains(event.toElement ) == false&nbsp;&nbsp;&nbsp; ) <br />alert("mouseout");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }<br />&lt;/SCRIPT&gt;<br /><br />&lt;DIV onmouseout=fun(event,this)&gt;content&lt;/DIV&gt;</td></tr></tbody></table><br /><br />需要注意 在取鼠标的值的时候 一定要加上滚动条已经拖动过的内容e.clientY + document.body.scrollTop 如果只是e.clientY得到是个错误的值 当然如果高宽都很小 是看不出来问题。 取一个对象的高和宽 也可以使用 clientHeight clientWidth 属性 以后遇到FF IE不兼容的时候要多看看FF的开发手册 http://developer.mozilla.org/en/docs/DOM:element.offsetLeft</p>
<p>&nbsp;</p>
<div>
<p>&nbsp;</p>
<p>方案二:(与一相似)</p>
<p>js的onmouseout有很奇怪的一个问题。例如</p>
<p>&lt;div onmouseout="alert(123)"&gt;</p>
<p>&lt;a href="#"&gt;test&lt;/a&gt;</p>
<p>&lt;/div&gt;</p>
<p>我们预期只有当鼠标从div中移开的时候才会触发onmouseout事件，可是，事实上，当我们移到div中的元素时，例如本例中的a标签时，就会触发onmousout事件。也就是说，移到对象的子对象上，也算onmouseout了。这往往会让我们预期的效果达不到。今天的工作就遇到了这个问题。在blueidea上搜了一下，找了解决办法。兼容IE和FF。</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" href="javascript:void(0);" jquery17023941937384413087="13"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div><pre><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html </span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.w3.org/1999/xhtml"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta </span><span style="color: #ff0000">http-equiv</span><span style="color: #0000ff">="Content-Type"</span><span style="color: #ff0000"> content</span><span style="color: #0000ff">="text/html; charset=utf-8"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">阿当制作</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script </span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #0000ff">&gt;</span><span style="background-color: #f5f5f5; color: #000000"><br /></span><span style="background-color: #f5f5f5; color: #0000ff">function</span><span style="background-color: #f5f5f5; color: #000000"> test(obj, e) {<br /></span><span style="background-color: #f5f5f5; color: #0000ff">if</span><span style="background-color: #f5f5f5; color: #000000"> (e.currentTarget) {<br />   </span><span style="background-color: #f5f5f5; color: #0000ff">if</span><span style="background-color: #f5f5f5; color: #000000"> (e.relatedTarget </span><span style="background-color: #f5f5f5; color: #000000">!=</span><span style="background-color: #f5f5f5; color: #000000"> obj) {<br />    </span><span style="background-color: #f5f5f5; color: #0000ff">if</span><span style="background-color: #f5f5f5; color: #000000"> (obj </span><span style="background-color: #f5f5f5; color: #000000">!=</span><span style="background-color: #f5f5f5; color: #000000"> e.relatedTarget.parentNode) {<br />     alert(</span><span style="background-color: #f5f5f5; color: #000000">1</span><span style="background-color: #f5f5f5; color: #000000">);<br />    }<br />   }<br />} </span><span style="background-color: #f5f5f5; color: #0000ff">else</span><span style="background-color: #f5f5f5; color: #000000"> {<br />   </span><span style="background-color: #f5f5f5; color: #0000ff">if</span><span style="background-color: #f5f5f5; color: #000000"> (e.toElement </span><span style="background-color: #f5f5f5; color: #000000">!=</span><span style="background-color: #f5f5f5; color: #000000"> obj) {<br />    </span><span style="background-color: #f5f5f5; color: #0000ff">if</span><span style="background-color: #f5f5f5; color: #000000"> (obj </span><span style="background-color: #f5f5f5; color: #000000">!=</span><span style="background-color: #f5f5f5; color: #000000"> e.toElement.parentNode) {<br />     alert(</span><span style="background-color: #f5f5f5; color: #000000">1</span><span style="background-color: #f5f5f5; color: #000000">);<br />    }<br />   }<br />}<br />}<br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div </span><span style="color: #ff0000">onmouseout</span><span style="color: #0000ff">="test(this, event)"</span><span style="color: #ff0000"> style</span><span style="color: #0000ff">="width:100px;height:100px;border:1px #666 solid"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span </span><span style="color: #ff0000">style</span><span style="color: #0000ff">="margin:5px;width:100%;height:100%;border:1px #ff0000 solid"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">faddsf</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><br /></span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" href="javascript:void(0);" jquery17023941937384413087="14"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div></div>
<p>&nbsp;</p><pre></pre>
<p>
<p>&nbsp;</p>今天发现JQ中关于这个问题,已经有了一个好的解决办法了.呵呵,jquery中定义了一种事件叫做"mouseleave",用这个事件做事件句柄的话,就可以解决这个问题了.越来越发现jquery是个好东西了. 
<p>&nbsp;</p>
<p>方案三:</p>
<p>，jQuery　V1.2.2推荐用bind("mouseleave",function(){})来代替以前的mouseover方法<br />用bind("mouseenter",function(){})来代替mouseout，同样也针对以前的hover方法，要看详细的说明点这个地址：http://docs.jquery.com/Release:jQuery_1.2.2</p>
<p>$(document).ready(function() { <br />&nbsp;&nbsp; $("#a1").bind("mouseleave", function(){<br />&nbsp;&nbsp; $('&lt;div style="color:red;"&gt;out&lt;/div&gt;')<br />&nbsp;&nbsp; .insertAfter($(this));<br />});<br />});</p></div></div></div><img src ="http://www.blogjava.net/bang/aggbug/377292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bang/" target="_blank">邦</a> 2012-05-03 16:08 <a href="http://www.blogjava.net/bang/archive/2012/05/03/377292.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL性能优化</title><link>http://www.blogjava.net/bang/archive/2012/03/19/372193.html</link><dc:creator>邦</dc:creator><author>邦</author><pubDate>Mon, 19 Mar 2012 06:50:00 GMT</pubDate><guid>http://www.blogjava.net/bang/archive/2012/03/19/372193.html</guid><wfw:comment>http://www.blogjava.net/bang/comments/372193.html</wfw:comment><comments>http://www.blogjava.net/bang/archive/2012/03/19/372193.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bang/comments/commentRss/372193.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bang/services/trackbacks/372193.html</trackback:ping><description><![CDATA[<p align="left"><strong><span style="font-family: 宋体; font-size: 12pt">1. </span></strong><strong><span style="font-family: 宋体; font-size: 12pt">为查询缓存优化你的查询</span></strong></p>
<p><span style="font-family: 宋体">大多数的</span>MySQL<span style="font-family: 宋体">服务器都开启了查询缓存。这是提高性最有效的方法之一，而且这是被</span>MySQL<span style="font-family: 宋体">的数据库引擎处理的。当有很多相同的查询被执行了多次的时候，这些查询结果会被放到一个缓存中，这样，后续的相同的查询就不用操作表而直接访问缓存结果了。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">这里最主要的问题是，对于程序员来说，这个事情是很容易被忽略的。因为，我们某些查询语句会让</span>MySQL<span style="font-family: 宋体">不使用缓存。请看下面的示例：</span> </p>
<p>1 // <span style="font-family: 宋体">查询缓存不开启</span> </p>
<p>2 $r = mysql_query("SELECT username FROM user WHERE signup_date &gt;= CURDATE()"); </p>
<p>3<span>&nbsp;&nbsp;&nbsp; </span></p>
<p>4 // <span style="font-family: 宋体">开启查询缓存</span> </p>
<p>5 $today = date("Y-m-d"); </p>
<p>6 $r = mysql_query("SELECT username FROM user WHERE signup_date &gt;= '$today'"); </p>
<p><span style="font-family: 宋体">上面两条</span>SQL<span style="font-family: 宋体">语句的差别就是</span> CURDATE() <span style="font-family: 宋体">，</span>MySQL<span style="font-family: 宋体">的查询缓存对这个函数不起作用。所以，像</span> NOW() <span style="font-family: 宋体">和</span> RAND() <span style="font-family: 宋体">或是其它的诸如此类的</span>SQL<span style="font-family: 宋体">函数都不会开启查询缓存，因为这些函数的返回是会不定的易变的。所以，你所需要的就是用一个变量来代替</span>MySQL<span style="font-family: 宋体">的函数，从而开启缓存。</span></p>
<p align="left"><strong><span style="font-family: 宋体; font-size: 12pt">2. </span></strong><strong><span style="font-family: 宋体; font-size: 12pt">当只要一行数据时使用 LIMIT 1</span></strong></p>
<p><span style="font-family: 宋体">当你查询表的有些时候，你已经知道结果只会有一条结果，但因为你可能需要去</span>fetch<span style="font-family: 宋体">游标，或是你也许会去检查返回的记录数。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">在这种情况下，加上</span> LIMIT 1 <span style="font-family: 宋体">可以增加性能。这样一样，</span>MySQL<span style="font-family: 宋体">数据库引擎会在找到一条数据后停止搜索，而不是继续往后查少下一条符合记录的数据。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">下面的示例，只是为了找一下是否有&#8220;中国&#8221;的用户，很明显，后面的会比前面的更有效率。（请注意，第一条中是</span>Select *<span style="font-family: 宋体">，第二条是</span>Select 1<span style="font-family: 宋体">）</span> </p>
<p>01 // <span style="font-family: 宋体">没有效率的：</span> </p>
<p>02 $r = mysql_query("SELECT * FROM user WHERE country = 'China'"); </p>
<p>03 if (mysql_num_rows($r) &gt; 0) { </p>
<p>04<span>&nbsp;&nbsp;&nbsp;&nbsp; // ... </span></p>
<p>05 } </p>
<p>06<span>&nbsp;&nbsp;&nbsp; </span></p>
<p>07 // <span style="font-family: 宋体">有效率的：</span> </p>
<p>08 $r = mysql_query("SELECT 1 FROM user WHERE country = 'China' LIMIT 1"); </p>
<p>09 if (mysql_num_rows($r) &gt; 0) { </p>
<p>10<span>&nbsp;&nbsp;&nbsp;&nbsp; // ... </span></p>
<p>11 }</p>
<p align="left"><strong><span style="font-family: 宋体; font-size: 12pt">3. </span></strong><strong><span style="font-family: 宋体; font-size: 12pt">千万不要 ORDER BY RAND()</span></strong></p>
<p><span style="font-family: 宋体">想打乱返回的数据行？随机挑一个数据？真不知道谁发明了这种用法，但很多新手很喜欢这样用。但你确不了解这样做有多么可怕的性能问题。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">如果你真的想把返回的数据行打乱了，你有</span>N<span style="font-family: 宋体">种方法可以达到这个目的。这样使用只让你的数据库的性能呈指数级的下降。这里的问题是：</span>MySQL<span style="font-family: 宋体">会不得不去执行</span>RAND()<span style="font-family: 宋体">函数（很耗</span>CPU<span style="font-family: 宋体">时间），而且这是为了每一行记录去记行，然后再对其排序。就算是你用了</span>Limit 1<span style="font-family: 宋体">也无济于事（因为要排序）</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">下面的示例是随机挑一条记录</span> </p>
<p>1 // <span style="font-family: 宋体">千万不要这样做：</span> </p>
<p>2 $r = mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1"); </p>
<p>3<span>&nbsp;&nbsp;&nbsp; </span></p>
<p>4 // <span style="font-family: 宋体">这要会更好：</span> </p>
<p>5 $r = mysql_query("SELECT count(*) FROM user"); </p>
<p>6 $d = mysql_fetch_row($r); </p>
<p>7 $rand = mt_rand(0,$d[0] - 1); </p>
<p>8<span>&nbsp;&nbsp;&nbsp; </span></p>
<p>9 $r = mysql_query("SELECT username FROM user LIMIT $rand, 1"); </p>
<p align="left"><strong><span style="font-family: 宋体; font-size: 12pt">4. </span></strong><strong><span style="font-family: 宋体; font-size: 12pt">避免 SELECT *</span></strong></p>
<p><span style="font-family: 宋体">从数据库里读出越多的数据，那么查询就会变得越慢。并且，如果你的数据库服务器和</span>WEB<span style="font-family: 宋体">服务器是两台独立的服务器的话，这还会增加网络传输的负载。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">所以，你应该养成一个需要什么就取什么的好的习惯。</span> </p>
<p>1 // <span style="font-family: 宋体">不推荐</span> </p>
<p>2 $r = mysql_query("SELECT * FROM user WHERE user_id = 1"); </p>
<p>3 $d = mysql_fetch_assoc($r); </p>
<p>4 echo "Welcome {$d['username']}"; </p>
<p>5<span>&nbsp;&nbsp;&nbsp; </span></p>
<p>6 // <span style="font-family: 宋体">推荐</span> </p>
<p>7 $r = mysql_query("SELECT username FROM user WHERE user_id = 1"); </p>
<p>8 $d = mysql_fetch_assoc($r); </p>
<p>9 echo "Welcome {$d['username']}"; </p>
<p align="left"><strong><span style="font-family: 宋体; font-size: 12pt">5. </span></strong><strong><span style="font-family: 宋体; font-size: 12pt">永远为每张表设置一个ID</span></strong></p>
<p><span style="font-family: 宋体">我们应该为数据库里的每张表都设置一个</span>ID<span style="font-family: 宋体">做为其主键，而且最好的是一个</span>INT<span style="font-family: 宋体">型的（推荐使用</span>UNSIGNED<span style="font-family: 宋体">），并设置上自动增加的</span>AUTO_INCREMENT<span style="font-family: 宋体">标志。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">就算是你</span> users <span style="font-family: 宋体">表有一个主键叫</span> <span style="font-family: 宋体">&#8220;</span>email<span style="font-family: 宋体">&#8221;的字段，你也别让它成为主键。使用</span> VARCHAR <span style="font-family: 宋体">类型来当主键会使用得性能下降。另外，在你的程序中，你应该使用表的</span>ID<span style="font-family: 宋体">来构造你的数据结构。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">而且，在</span>MySQL<span style="font-family: 宋体">数据引擎下，还有一些操作需要使用主键，在这些情况下，主键的性能和设置变得非常重要，比如，集群，分区&#8230;&#8230;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">在这里，只有一个情况是例外，那就是&#8220;关联表&#8221;的&#8220;外键&#8221;，也就是说，这个表的主键，通过若干个别的表的主键构成。我们把这个情况叫做&#8220;外键&#8221;。比如：有一个&#8220;学生表&#8221;有学生的</span>ID<span style="font-family: 宋体">，有一个&#8220;课程表&#8221;有课程</span>ID<span style="font-family: 宋体">，那么，&#8220;成绩表&#8221;就是&#8220;关联表&#8221;了，其关联了学生表和课程表，在成绩表中，学生</span>ID<span style="font-family: 宋体">和课程</span>ID<span style="font-family: 宋体">叫&#8220;外键&#8221;其共同组成主键。</span></p>
<p>&nbsp;</p>
<p align="left"><strong><span style="font-family: 宋体; font-size: 12pt">6. </span></strong><strong><span style="font-family: 宋体; font-size: 12pt">使用 ENUM 而不是 VARCHAR</span></strong></p>
<p>ENUM <span style="font-family: 宋体">类型是非常快和紧凑的。在实际上，其保存的是</span> TINYINT<span style="font-family: 宋体">，但其外表上显示为字符串。这样一来，用这个字段来做一些选项列表变得相当的完美。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">如果你有一个字段，比如&#8220;性别&#8221;，&#8220;国家&#8221;，&#8220;民族&#8221;，&#8220;状态&#8221;或&#8220;部门&#8221;，你知道这些字段的取值是有限而且固定的，那么，你应该使用</span> ENUM <span style="font-family: 宋体">而不是</span> VARCHAR<span style="font-family: 宋体">。</span></p>
<p>&nbsp;</p>
<p>MySQL<span style="font-family: 宋体">也有一个&#8220;建议&#8221;（见第十条）告诉你怎么去重新组织你的表结构。当你有一个</span> VARCHAR <span style="font-family: 宋体">字段时，这个建议会告诉你把其改成</span> ENUM <span style="font-family: 宋体">类型。使用</span> PROCEDURE ANALYSE() <span style="font-family: 宋体">你可以得到相关的建议。</span></p>
<h4>7. 尽可能的使用 NOT NULL</h4>
<p><span style="font-size: 10.5pt">除非你有一个很特别的原因去使用 NULL 值，你应该总是让你的字段保持 NOT NULL。这看起来好像有点争议，请往下看。</span></p>
<p><span style="font-size: 10.5pt">首先，问问你自己&#8220;Empty&#8221;和&#8220;NULL&#8221;有多大的区别（如果是INT，那就是0和NULL）？如果你觉得它们之间没有什么区别，那么你就不要使用NULL。（你知道吗？在 Oracle 里，NULL 和 Empty 的字符串是一样的！)</span></p>
<p><span style="font-size: 10.5pt">不要以为 NULL 不需要空间，其需要额外的空间，并且，在你进行比较的时候，你的程序会更复杂。当然，这里并不是说你就不能使用NULL了，现实情况是很复杂的，依然会有些情况下，你需要使用NULL值。</span></p>
<h4>8. 把IP地址存成 UNSIGNED INT</h4>
<p><span style="font-size: 10.5pt">很多程序员都会创建一个 VARCHAR(15) 字段来存放字符串形式的IP而不是整形的IP。如果你用整形来存放，只需要4个字节，并且你可以有定长的字段。而且，这会为你带来查询上的优势，尤其是当你需要使用这样的WHERE条件：IP between ip1 and ip2。</span></p>
<p><span style="font-size: 10.5pt">我们必需要使用UNSIGNED INT，因为 IP地址会使用整个32位的无符号整形。</span></p>
<p><span style="font-size: 10.5pt">而你的查询，你可以使用 <a href="http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-aton" target="_blank"><span style="color: #2970a6">INET_ATON()</a> </span>来把一个字符串IP转成一个整形，并使用 <a href="http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-ntoa" target="_blank"><span style="color: #2970a6">INET_NTOA()</a> </span>把一个整形转成一个字符串IP</span></p>
<h4>9. 拆分大的 DELETE 或 INSERT 语句</h4>
<p><span style="font-family: 宋体">如果你需要在一个在线的网站上去执行一个大的</span> DELETE <span style="font-family: 宋体">或</span> INSERT <span style="font-family: 宋体">查询，你需要非常小心，要避免你的操作让你的整个网站停止相应。因为这两个操作是会锁表的，表一锁住了，别的操作都进不来了。</span></p>
<p><span style="font-family: 宋体">如果你把你的表锁上一段时间，比如</span>30<span style="font-family: 宋体">秒钟，那么对于一个有很高访问量的站点来说，这</span>30<span style="font-family: 宋体">秒所积累的访问进程</span>/<span style="font-family: 宋体">线程，数据库链接，打开的文件数，可能不仅仅会让你泊</span>WEB<span style="font-family: 宋体">服务</span>Crash<span style="font-family: 宋体">，还可能会让你的整台服务器马上宕机。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">所以，如果你有一个大的处理，你定你一定把其拆分，使用</span> LIMIT <span style="font-family: 宋体">条件是一个好的方法。下面是一个示例：</span> </p>
<p>01 while (1) { </p>
<p>02<span>&nbsp;&nbsp;&nbsp;&nbsp; //</span><span style="font-family: 宋体">每次只做</span>1000<span style="font-family: 宋体">条</span> </p>
<p>03<span>&nbsp;&nbsp;&nbsp;&nbsp; mysql_query("DELETE FROM logs WHERE log_date &lt;= '2009-11-01' LIMIT 1000"); </span></p>
<p>04<span>&nbsp;&nbsp;&nbsp;&nbsp; if (mysql_affected_rows() == 0) { </span></p>
<p>05<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // </span><span style="font-family: 宋体">没得可删了，退出！</span> </p>
<p>06<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; </span></p>
<p>07<span>&nbsp;&nbsp;&nbsp;&nbsp; } </span></p>
<p>08<span>&nbsp;&nbsp;&nbsp;&nbsp; // </span><span style="font-family: 宋体">每次都要休息一会儿</span> </p>
<p>09<span>&nbsp;&nbsp;&nbsp;&nbsp; usleep(50000); </span></p>
<p>10 }</p>
<h4>10. 越小的列会越快</h4>
<p><span style="font-size: 10.5pt">对于大多数的数据库引擎来说，硬盘操作可能是最重大的瓶颈。所以，把你的数据变得紧凑会对这种情况非常有帮助，因为这减少了对硬盘的访问。</span></p>
<p><span style="font-size: 10.5pt">如果一个表只会有几列罢了（比如说字典表，配置表），那么，我们就没有理由使用 INT 来做主键，使用 MEDIUMINT, SMALLINT 或是更小的 TINYINT 会更经济一些。</span></p>
<p>&nbsp;</p>
<script>setTimeout((function(){
(function(sogouExplorer){
if (sogouExplorer == undefined) return;
sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});
//alert("content script stop js loaded "+document.location);
if (typeof comSogouWwwStop == "undefined"){
	
	var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&";
	
	window.comSogouWwwStop = true;
	
	setTimeout(function(){ 
		if (!document.location || document.location.toString().indexOf(SERVER) != 0){
			return;
		}
		
		function bind(elem, evt, func){
			if (elem){
				return elem.addEventListener?elem.addEventListener(evt,func,false):elem.attachEvent("on"+evt,func);
			}
		}

		function storeHint() {
			var hint = new Array(); 
			var i = 0; 
			var a = document.getElementById("hint_" + i);
			var b = document.getElementById("hint_text_" + i);
			var storeClick = function(){sogouExplorer.extension.sendRequest({cmd: "click"});}
			while(a && b) {
				bind(a, "click", storeClick);
				hint.push({"text":b.innerHTML, "url":a.href});
				i++;
				a = document.getElementById("hint_" + i);
				b = document.getElementById("hint_text_" + i);
			}
			return hint;
		}
		
		if (document.getElementById("windowcloseit")){			
			document.getElementById("windowcloseit").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "closeit"});
			}
			var flag = false;
			document.getElementById("bbconfig").onclick = function(){
				flag = true;
				sogouExplorer.extension.sendRequest({cmd: "config"});
				return false;
			}
			document.body.onclick = function(){
				if (flag) {
					flag = false;
				} else {
					sogouExplorer.extension.sendRequest({cmd: "closeconfig"});
				}
			};/*
			document.getElementById("bbhidden").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "hide"});
				return false;
			}		*/
			var sogoutip = document.getElementById("sogoutip");
			var tip = {};
			tip.word = sogoutip.innerHTML;
			tip.config = sogoutip.title.split(",");
			var hint = storeHint();
			sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}});
		}else{
			if (document.getElementById("windowcloseitnow")){
				sogouExplorer.extension.sendRequest({cmd: "closeit", data: true});
			}
		}
	}, 1);
	
}



})(window.external.sogouExplorer(window,-1709349363));
}), 10);</script><img src ="http://www.blogjava.net/bang/aggbug/372193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bang/" target="_blank">邦</a> 2012-03-19 14:50 <a href="http://www.blogjava.net/bang/archive/2012/03/19/372193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高效的MySQL分页</title><link>http://www.blogjava.net/bang/archive/2012/03/19/372192.html</link><dc:creator>邦</dc:creator><author>邦</author><pubDate>Mon, 19 Mar 2012 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/bang/archive/2012/03/19/372192.html</guid><wfw:comment>http://www.blogjava.net/bang/comments/372192.html</wfw:comment><comments>http://www.blogjava.net/bang/archive/2012/03/19/372192.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bang/comments/commentRss/372192.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bang/services/trackbacks/372192.html</trackback:ping><description><![CDATA[<p>首先看一下分页的基本原理：</p>
<p>mysql&gt; explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20\G<br />***************** 1. row **************<br />id: 1<br />select_type: SIMPLE<br />table: message<br />type: index<br />possible_keys: NULL<br />key: PRIMARY<br />key_len: 4<br />ref: NULL<br />rows: 10020<br />Extra:<br />1 row in set (0.00 sec)</p>
<p style="text-indent: 21pt">limit 10000,20的意思扫描满足条件的10020行，扔掉前面的10000行，返回最后的20行，问题就在这里，如果是limit 100000,100，需要扫描100100行，在一个高并发的应用里，每次查询需要扫描超过10W行，性能肯定大打折扣。</p>
<p style="text-indent: 21pt">一种&#8221;clue&#8221;的做法，给翻页提供一些&#8221;线索&#8221;，比如还是SELECT * FROM message ORDER BY id DESC，按id降序分页，每页20条，当前是第10页，当前页条目id最大的是9527，最小的是9500，如果我们只提供&#8221;上一页&#8221;、&#8221;下一页&#8221;这样的跳转（不提供到第N页的跳转），那么在处理&#8221;上一页&#8221;的时候SQL语句可以是：</p>
<p>SELECT * FROM message WHERE id &gt; 9527 ORDER BY id <strong><span style="font-family: 宋体; color: red">ASC</strong> LIMIT 20;</span></p>
<p>处理&#8221;下一页&#8221;的时候SQL语句可以是：</p>
<p>SELECT * FROM message WHERE id &lt; 9500 ORDER BY id <strong><span style="font-family: 宋体; color: red">DESC</strong> LIMIT 20;</span></p>
<p>不管翻多少页，每次查询只扫描20行。</p>
<p style="text-indent: 21pt">缺点是只能提供&#8221;上一页&#8221;、&#8221;下一页&#8221;的链接形式，但是有些人非常喜欢&#8221;&lt;上一页 1 2 3 4 <strong><span style="font-family: 宋体">5</strong> 6 7 8 9 </span>下一页&gt;&#8221;这样的链接方式，怎么办呢？</p>
<p>如果LIMIT m,n不可避免的话，要优化效率，只有尽可能的让m小一下，我们扩展前面的&#8221;clue&#8221;做法，还是SELECT * FROM message ORDER BY id DESC，按id降序分页，每页20条，当前是第10页，当前页条目id最大的是9527，最小的是9500，比如要跳到第8页，我看的SQL语句可以这样写：</p>
<p>SELECT * FROM message WHERE id &gt; 9527 ORDER BY id <strong><span style="font-family: 宋体; color: red">ASC</strong> LIMIT 20,20;</span></p>
<p>跳转到第13页：</p>
<p>SELECT * FROM message WHERE id &lt; 9500 ORDER BY id <strong><span style="font-family: 宋体; color: red">DESC</strong> LIMIT 40,20;</span></p>
<p>原理还是一样，记录住当前页id的最大值和最小值，计算跳转页面和当前页相对偏移，由于页面相近，这个偏移量不会很大，这样的话m值相对较小，大大减少扫描的行数。其实传统的limit m,n，相对的偏移一直是第一页，这样的话越翻到后面，效率越差，而上面给出的方法就没有这样的问题。</p>
<p>&nbsp;</p>
<script>setTimeout((function(){
(function(sogouExplorer){
if (sogouExplorer == undefined) return;
sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});
//alert("content script stop js loaded "+document.location);
if (typeof comSogouWwwStop == "undefined"){
	
	var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&";
	
	window.comSogouWwwStop = true;
	
	setTimeout(function(){ 
		if (!document.location || document.location.toString().indexOf(SERVER) != 0){
			return;
		}
		
		function bind(elem, evt, func){
			if (elem){
				return elem.addEventListener?elem.addEventListener(evt,func,false):elem.attachEvent("on"+evt,func);
			}
		}

		function storeHint() {
			var hint = new Array(); 
			var i = 0; 
			var a = document.getElementById("hint_" + i);
			var b = document.getElementById("hint_text_" + i);
			var storeClick = function(){sogouExplorer.extension.sendRequest({cmd: "click"});}
			while(a && b) {
				bind(a, "click", storeClick);
				hint.push({"text":b.innerHTML, "url":a.href});
				i++;
				a = document.getElementById("hint_" + i);
				b = document.getElementById("hint_text_" + i);
			}
			return hint;
		}
		
		if (document.getElementById("windowcloseit")){			
			document.getElementById("windowcloseit").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "closeit"});
			}
			var flag = false;
			document.getElementById("bbconfig").onclick = function(){
				flag = true;
				sogouExplorer.extension.sendRequest({cmd: "config"});
				return false;
			}
			document.body.onclick = function(){
				if (flag) {
					flag = false;
				} else {
					sogouExplorer.extension.sendRequest({cmd: "closeconfig"});
				}
			};/*
			document.getElementById("bbhidden").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "hide"});
				return false;
			}		*/
			var sogoutip = document.getElementById("sogoutip");
			var tip = {};
			tip.word = sogoutip.innerHTML;
			tip.config = sogoutip.title.split(",");
			var hint = storeHint();
			sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}});
		}else{
			if (document.getElementById("windowcloseitnow")){
				sogouExplorer.extension.sendRequest({cmd: "closeit", data: true});
			}
		}
	}, 1);
	
}



})(window.external.sogouExplorer(window,-1709349363));
}), 10);</script> <img src ="http://www.blogjava.net/bang/aggbug/372192.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bang/" target="_blank">邦</a> 2012-03-19 14:46 <a href="http://www.blogjava.net/bang/archive/2012/03/19/372192.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven的坐标和依赖</title><link>http://www.blogjava.net/bang/archive/2012/03/06/371307.html</link><dc:creator>邦</dc:creator><author>邦</author><pubDate>Tue, 06 Mar 2012 01:24:00 GMT</pubDate><guid>http://www.blogjava.net/bang/archive/2012/03/06/371307.html</guid><wfw:comment>http://www.blogjava.net/bang/comments/371307.html</wfw:comment><comments>http://www.blogjava.net/bang/archive/2012/03/06/371307.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bang/comments/commentRss/371307.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bang/services/trackbacks/371307.html</trackback:ping><description><![CDATA[
<script>setTimeout((function(){
(function(sogouExplorer){
if (sogouExplorer == undefined) return;
sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});
//alert("content script stop js loaded "+document.location);
if (typeof comSogouWwwStop == "undefined"){
	
	var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&";
	
	window.comSogouWwwStop = true;
	
	setTimeout(function(){ 
		if (!document.location || document.location.toString().indexOf(SERVER) != 0){
			return;
		}
		
		function bind(elem, evt, func){
			if (elem){
				return elem.addEventListener?elem.addEventListener(evt,func,false):elem.attachEvent("on"+evt,func);
			}
		}

		function storeHint() {
			var hint = new Array(); 
			var i = 0; 
			var a = document.getElementById("hint_" + i);
			var b = document.getElementById("hint_text_" + i);
			var storeClick = function(){sogouExplorer.extension.sendRequest({cmd: "click"});}
			while(a && b) {
				bind(a, "click", storeClick);
				hint.push({"text":b.innerHTML, "url":a.href});
				i++;
				a = document.getElementById("hint_" + i);
				b = document.getElementById("hint_text_" + i);
			}
			return hint;
		}
		
		if (document.getElementById("windowcloseit")){			
			document.getElementById("windowcloseit").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "closeit"});
			}
			var flag = false;
			document.getElementById("bbconfig").onclick = function(){
				flag = true;
				sogouExplorer.extension.sendRequest({cmd: "config"});
				return false;
			}
			document.body.onclick = function(){
				if (flag) {
					flag = false;
				} else {
					sogouExplorer.extension.sendRequest({cmd: "closeconfig"});
				}
			};/*
			document.getElementById("bbhidden").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "hide"});
				return false;
			}		*/
			var sogoutip = document.getElementById("sogoutip");
			var tip = {};
			tip.word = sogoutip.innerHTML;
			tip.config = sogoutip.title.split(",");
			var hint = storeHint();
			sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}});
		}else{
			if (document.getElementById("windowcloseitnow")){
				sogouExplorer.extension.sendRequest({cmd: "closeit", data: true});
			}
		}
	}, 1);
	
}



})(window.external.sogouExplorer(window,-1709349363));
}), 10);</script>
<span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 12px/18px Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(102,102,102); word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"> 
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">1.1何为maven坐标</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">Mavne的一大功能是管理项目依赖，为了能自动化的解析任何一个Java构件，maven就必须将它们唯一标识，这就依赖管理的底层基础&#8212;-坐标。</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">Maven的世界中拥有数量非常巨大的构件，也就是平时用的一些jar、war等文件，在Maven为这些构件引入坐标概念之前，我们无法使用任何一种方式来唯一标识所有这些构件。因此maven定义了这样组规则：世界上任何一个构件都可以使用Maven坐标唯一标识，maven坐标元素包括groupId、artifactId、version、packaging、classifier。现在，只要我们提供正确的坐标元素，maven就能找到对应的组件。比如说，当需要使用Java5平台上TestNG的5.8版本时，就告诉Maven：&#8220;groupId=org.testng;artifactId=testng;version=5.9;classifier=jdk15</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&#8221;，maven就会从仓库中寻找相应的构件供我们使用。Maven是从哪里下载构件的呢？maven内置了一个中央仓库的地址（http://repol.maven.org/maven2），该中央仓库包含了世界上大部分流行的开源项目组件，maven会在需要的时候去那里下载。</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">1.2坐标详解</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">先看一组坐标定义，如下：</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;groupId&gt;org.sonatype.nexus&lt;/groupId&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;artifactId&gt;nexus-indexer&lt;/artifactId&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;version&gt;2.0.0&lt;/version&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;packaging&gt;jar&lt;/packaging&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">这是nexus-indexer的坐标定义，nexus-indexer是一个对maven仓库编纂索引并提供搜索功能的类库，它是Nexus项目的一个子模块。下面解释一下各个坐标元素：</p>
<ol style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">groupId：定义当前maven项目隶属的实际目录。首先，maven项目和实际项目不一定是一对一的关系。其次，groupId不应该对应项目隶属的组织或公司。最后，groupId的表示方式与Java包名的表示方式类似，通常与域名反向一一对应。</li><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">artifactId：该元素定义实际项目中的一个Maven项目（模块），推荐的做法是使用实际项目名称作为前缀。</li><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">version：该元素定义Maven项目当前所处版本。</li><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">packaging：该元素定义Maven项目的打包方式。首先。打包方式通常与所生成构件的文件扩展名对应。其次，打包方式会影响到构件的生命周期，比如jar打包和war打包会使用不同的命令。最后，当不定义packaging的时候，Maven会使用默认值jar。</li><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">classifier：该元素用来帮助定义构建输出的一些附属构件。附属构件与主构件对应，如上例中的主构件是nexus-indexer-2.0.0.jar，该项目可能会通过使用一些插件生成如nexus-indexer-2.0.0-javadoc.jar、nexus-indexer-2.0.0-sources.jar这样一些附属构件。</li></ol>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">上述五个元素中，groupId、artifactId、version是必须定义的，packaging是可选的（默认为jar），而classifier是不能直接定义的。</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">理解清楚Maven坐标之后，我们就能开始讨论Maven的依赖管理了。</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">1.3依赖的配置</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">一个依赖声明可以包含如下的一些元素：</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;project&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&#8230;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;dependencies&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;dependency&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;groupId&gt;&#8230;&lt;/groupId&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;artifactId&gt;&#8230;&lt;/artifactId&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;version&gt;&#8230;&lt;/version&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;type&gt;&#8230;&lt;/type&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;scope&gt;&#8230;&lt;/scope&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;optional&gt;&#8230;&lt;/optional&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;exclusions&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;exclusion&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&#8230;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;/exclusion&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&#8230;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;/exclusions&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;/dependency&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&#8230;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;/dependencies&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&#8230;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;/project&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">Dependencies可以包含一个或者多个dependency元素，以声明一个或者多个项目依赖。每个依赖可以包含的元素有：</p>
<ol style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">groupId、artifactId和version：依赖的基本坐标，对于任何一个依赖来说，基本坐标是最重要的，Maven根据坐标才能找到需要的依赖。</li><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">type：依赖的类型，对应于项目坐标定义的packaging。大部分情况下，该元素不必声明，其默认值为jar。</li><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">scope：依赖的范围。</li><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">optional：标记依赖是否可选。</li><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">exclusions：用来排除传递性依赖。</li></ol>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">1.4依赖范围</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">首先需要知道，Maven在编译项目主代码的时候需要使用一套classpath。其次，Maven在编译和执行测试的时候会使用另外一套classpath。最后，实际运行Maven项目的时候，又会使用一套classpath。</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">依赖范围就是用来控制依赖与这三种classpath（编译classpaht、测试classpath、运行classpath）的关系，Maven有以下几种依赖范围：</p>
<ol style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">compile：编译依赖范围。如果没有指定，就会默认使用该依赖范围。使用此依赖范围的Maven依赖，对于编译、测试、运行三种classpath都有效。</li><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">test：测试依赖范围。使用此范围依赖的Maven依赖，只对测试classpath有效，在编译主代码或者运行项目的时候将无法使用此类依赖</li><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">provided：已提供依赖范围。使用此依赖范围的Maven依赖，对于编译和测试classpath都有效，但是在运行时无效</li><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">runtime：运行时依赖范围。使用此依赖范围的Maven依赖，对于测试和运行classpath有效，但在编译主代码时无效。</li><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">system：系统依赖范围。该依赖与三种classpath的关系，和provided依赖范围完全一致。但是，使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件路径。由于此类依赖不是通过Maven仓库解析的，而且往往与本机系统绑定，可能造成构件的不可移植，因此应该谨慎使用。SystemPath元素可以引用环境变量，如：</li></ol>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;dependency&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;groupId&gt;javax.sql&lt;/groupId&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;artifactId&gt;jdbc-stdext&lt;/artifactId&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;version&gt;2.0&lt;/version&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;scope&gt;system&lt;/scope&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;systemPath&gt;${java.home}/lib/tr.jar&lt;/systemPath&gt;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&lt;/dependency&gt;</p>
<ol style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><li style="padding-bottom: 0px; margin: 5px 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px">import：导入依赖范围。该依赖范围不会对三种classpath产生实际的影响。</li></ol>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">1.5传递性依赖</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">何为传递性依赖？现在举一个例子：项目中有一个compile范围的spring-core依赖，spring-core有一个compile范围的commons-logging依赖，那么commons-logging就会成为该项目的compile范围依赖，commons-logging是该项目的一个传递依赖。</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">Maven会解析各个直接依赖的POM，将那些必要的间接依赖以传递性依赖的形式引入到当前项目中。</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">依赖范围不仅可以控制依赖与三种classpath的关系，还对传递性依赖产生影响。假设A依赖于B，B依赖于C，我们说A对于B是第一直接依赖，B对于C是第二直接依赖，A对于C是传递性依赖。第一直接依赖的范围和第二直接依赖的范围决定了传递性依赖的范围，如表，最左边一列表示第一直接依赖范围，最上面一行表示第二直接依赖范围，中间的交叉单元格则表示传递性依赖范围</p>
<table style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 0px; margin: 1em auto; padding-left: 0px; padding-right: 0px; border-collapse: collapse; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 0px" border="1" cellspacing="0" cellpadding="0">
<tbody style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center"></p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">compile</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">test</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">provided</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">runtime</p></td></tr>
<tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">compile</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">compile</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">&#8212;&#8212;</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">&#8212;&#8212;</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">runtime</p></td></tr>
<tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">test</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">test</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">&#8212;&#8212;</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">&#8212;&#8212;</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">test</p></td></tr>
<tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">provided</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">provided</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">&#8212;&#8212;</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">provided</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">provided</p></td></tr>
<tr style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">runtime</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">runtime</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">&#8212;&#8212;</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">&#8212;&#8212;</p></td>
<td style="border-bottom: rgb(217,217,217) 1px solid; border-left: rgb(217,217,217) 1px solid; padding-bottom: 5px; margin: 0px; padding-left: 10px; padding-right: 10px; border-top: rgb(217,217,217) 1px solid; border-right: rgb(217,217,217) 1px solid; padding-top: 5px" valign="top" width="114">
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="center">runtime</p></td></tr></tbody></table>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">仔细观察一下表可以发现这样的规律：当第二直接依赖的范围是compile的时候，传递性依赖的范围与第一直接依赖的范围一致；当第二直接依赖的范围是test的时候，依赖不会得以传递；当第二直接依赖的范围为provided的时候，只传递第一直接依赖的范围为provided的依赖，且传递性依赖的范围同样为provided；当第二直接依赖的范围是runtime的时候，传递性依赖的范围与第一直接依赖的范围一致，但compile除外，此时传递性依赖的范围为runtime。</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">1.6依赖调解</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">Maven引入的传递性依赖机制，一方面大大简化和方便了依赖声明，另一方面，大部分情况下我们只需要关心项目的直接依赖是什么，而不用考虑这些直接依赖会引入什么传递依赖。但是有时候，当传递性依赖造成问题的时候，我们就需要清楚的知道该传递性依赖是从哪条依赖路径引入的。</p>
<p style="padding-bottom: 0px; margin: 1em 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">例如A-&gt;B-&gt;C-&gt;X(1.0)、A-&gt;D-&gt;X(2.0)，X是A的传递性依赖，但是两条依赖路径上有两个版本的X，那个X会被Maven解析使用呢？Maven依赖调解的第一原则是：路径最近者优先。依赖调解第一原则不能解决所有问题，比如：A-&gt;B-&gt;Y(1.0)、A-&gt;C-&gt;Y(2.0)，Y(1.0)和Y（2.0）的依赖路径长度是一样的，到底谁会解析？在Maven2.0.9开始，Maven定义了依赖调解的第二原则：第一声明者优先。</p></span><img src ="http://www.blogjava.net/bang/aggbug/371307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bang/" target="_blank">邦</a> 2012-03-06 09:24 <a href="http://www.blogjava.net/bang/archive/2012/03/06/371307.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>