??xml version="1.0" encoding="utf-8" standalone="yes"?>中文字幕亚洲第一,亚洲成A人片77777国产,国产成人亚洲精品影院http://www.tkk7.com/junjie/zh-cnMon, 12 May 2025 02:54:36 GMTMon, 12 May 2025 02:54:36 GMT60心情调整http://www.tkk7.com/junjie/archive/2009/05/11/270112.htmlwangjunjiewangjunjieMon, 11 May 2009 13:23:00 GMThttp://www.tkk7.com/junjie/archive/2009/05/11/270112.html 我知道怎么回事了!惌v以前的事情啦!以前怎么啦!以前惌vq块疤上?自卑啦!呵呵 q去的都已经q去啦!我也不要怪自己!Z么呢?我ؓ什么要怪自己呢Q如果这块疤长到谁n上谁有能一点不难过呢?有几个h能做的比我好呢?有几个h能经历了q么大的痛苦q挺q来啦呢Q呵?q就是毅力啊Q?br /> 你在好好x 菲菲q感觉这块疤痕很好看来!其实话有说回来了Q我有什么好难过的!q我现在这块疤痕没整理的话Q有块红色也挺好的!
咱q模?脸型他们真挡不住Q在侧面他们q感觉是撞的呢!都说有点颜色怸挺好看的呢!虽然咱有疤但p模样qҎ边的q块疤跟p模样张的一点也不别白脔RU模样差Q你没比没数Q这么多?能张的小白脸的那个层ơ的人已l不多了Qh已经很多了!我到了这个层ơ已l很高了Q其实你一直感到难看的事,到最后真有小姑娘真有人很ƣ赏q些Q我又何苦遭q个|呢Q呵?模样真的已经很不错了Q每个h都望漂亮,如果能变的很漂亮 谁又何尝?br /> 愿意?因ؓq个东西都是父母l决定的不是自己说了的Q?q是太正常的事情Q你看看那么多张的那么一般的Zq都照样q的挺美的!因ؓ我真的很不错啊!生活的好好坏坏不是有模样军_Q真正幸的生活是靠自己的努力!你看看n边的那些男h们!不用你张的多么帅Q只要你有颗乐观坚强 宽容善良的心够了!你的生活军_是很好的!有心q奛_ 有成功的事业Q怒\吧!孩子你已l完成了 该完的一Q务!攑ּq个吧!攑ּ了!全心的开始!也是全新的开始!因ؓ明天真是太美好了Q?

wangjunjie 2009-05-11 21:23 发表评论
]]>
连?/title><link>http://www.tkk7.com/junjie/archive/2009/03/31/263226.html</link><dc:creator>wangjunjie</dc:creator><author>wangjunjie</author><pubDate>Tue, 31 Mar 2009 12:17:00 GMT</pubDate><guid>http://www.tkk7.com/junjie/archive/2009/03/31/263226.html</guid><wfw:comment>http://www.tkk7.com/junjie/comments/263226.html</wfw:comment><comments>http://www.tkk7.com/junjie/archive/2009/03/31/263226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/junjie/comments/commentRss/263226.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/junjie/services/trackbacks/263226.html</trackback:ping><description><![CDATA[http://www.3y11.com/ <img src ="http://www.tkk7.com/junjie/aggbug/263226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/junjie/" target="_blank">wangjunjie</a> 2009-03-31 20:17 <a href="http://www.tkk7.com/junjie/archive/2009/03/31/263226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>子窗?/title><link>http://www.tkk7.com/junjie/archive/2009/03/25/261955.html</link><dc:creator>wangjunjie</dc:creator><author>wangjunjie</author><pubDate>Wed, 25 Mar 2009 14:35:00 GMT</pubDate><guid>http://www.tkk7.com/junjie/archive/2009/03/25/261955.html</guid><description><![CDATA[?、最基本的弹出窗口代码?<br /> <br /> <SCRIPT LANGUAGE="javascript"> <br /> <!-- <br /> window.open ('page.html') <br /> --> <br /> </SCRIPT> <br /> <br /> 因ؓq是一Djavascripts代码Q所以它们应该放?lt;SCRIPT LANGUAGE="javascript">标签?lt;/script>之间?lt;!-- ?-->是对一些版本低的浏览器起作用,在这些老浏览器中不会将标签中的代码作ؓ文本昄出来。要Lq个好习惯啊。window.open ('page.html') 用于控制弹出新的H口page.htmlQ如果page.html不与ȝ口在同一路径下,前面应写明\径,l对路径(<a href="http:///" target="_blank">http://</a>)和相对\?../)均可。用单引号和双引号都可以Q只是不要؜用。这一D代码可以加入HTML的Q意位|,<head>?lt;/head>之间可以Q?lt;body>?lt;/body>也可以,前早执行Q尤其是面代码长,又想佉K面早点弹出就量往前放?<br /> <br /> ?、经q设|后的弹出窗口?<br /> <br /> 下面再说一说弹出窗口的讄。只要再往上面的代码中加一点东西就可以了。我们来定制q个弹出的窗口的外观Q尺寸大,弹出的位|以适应该页面的具体情况?<br /> <br /> <SCRIPT LANGUAGE="javascript"> <br /> <!-- <br /> window.open ('page.html', 'newwindow', 'height=100, width=400, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no') //q句要写成一?<br /> --> <br /> </SCRIPT> <br /> <br /> 参数解释Q?<br /> <br /> <SCRIPT LANGUAGE="javascript"> js脚本开始; <br /> window.open 弹出新窗口的命oQ?<br /> 'page.html' 弹出H口的文件名Q?<br /> 'newwindow' 弹出H口的名字(不是文g名)Q非必须Q可用空''代替Q?<br /> height=100 H口高度Q?<br /> width=400 H口宽度Q?<br /> top=0 H口距离屏幕上方的象素| <br /> left=0 H口距离屏幕左侧的象素| <br /> toolbar=no 是否昄工具栏,yes为显C; <br /> menubarQscrollbars 表示菜单栏和滚动栏?<br /> resizable=no 是否允许改变H口大小Qyes为允许; <br /> location=no 是否昄地址栏,yes为允许; <br /> status=no 是否昄状态栏内的信息Q通常是文件已l打开Q,yes为允许; <br /> </SCRIPT> js脚本l束 <br /> <br /> ?、用函数控制弹出H口?<br /> <br /> 下面是一个完整的代码?<br /> <html> <br /> <head> <br /> <script LANGUAGE="JavaScript"> <br /> <!-- <br /> function openwin() { <br /> window.open ("page.html", "newwindow", "height=100, width=400, toolbar =no, menubar=no, scrollbars=no, resizable=no, location=no, status=no") //写成一?<br /> } <br /> //--> <br /> </script> <br /> </head> <br /> <body onload="openwin()"> <br /> L的页面内?.. <br /> </body> <br /> </html> <br /> <br /> q里定义了一个函数openwin(),函数内容是打开一个窗口。在调用它之前没有Q何用途。怎么调用呢? <br /> <br /> Ҏ一Q?lt;body onload="openwin()"> 览器读面时弹出窗口; <br /> Ҏ二:<body onunload="openwin()"> 览器离开面时弹出窗口; <br /> Ҏ三:用一个连接调用: <br /> <a href="#" onclick="openwin()">打开一个窗?lt;/a> <br /> 注意Q用的“#”是虚q接?<br /> Ҏ四:用一个按钮调用: <br /> <input type="button" onclick="openwin()" value="打开H口"> <br /> <br /> ?、同时弹?个窗口?<br /> <br /> Ҏ代码E微改动一下: <br /> <br /> <script LANGUAGE="JavaScript"> <br /> <!-- <br /> function openwin() { <br /> window.open ("page.html", "newwindow", "height=100, width=100, top=0, left=0,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=n o, status=no")//写成一?<br /> window.open ("page2.html", "newwindow2", "height=100, width=100, top=1 00, left=100,toolbar=no, menubar=no, scrollbars=no, resizable=no, loca tion=no, status=no")//写成一?<br /> } <br /> //--> <br /> </script> <br /> 为避免弹出的2个窗口覆盖,用top和left控制一下弹出的位置不要怺覆盖卛_ 。最后用上面说过的四U方法调用即可?<br /> 注意Q?个窗口的name(newwindows和newwindow2)不要相同Q或者干脆全部ؓI?<br /> <br /> ?、主H口打开文g1.htmQ同时弹出小H口page.html?<br /> <br /> 如下代码加入ȝ?lt;head>区: <br /> <script language="javascript"> <br /> <!-- <br /> function openwin() { <br /> window.open("page.html","","width=200,height=200") <br /> } <br /> //--> <br /> </script> <br /> 加入<body>区: <br /> <a href="1.htm" onclick="openwin()">open</a>卛_?<br /> <br /> ?、弹出的H口之定时关闭控制?<br /> <br /> 下面我们再对弹出的窗口进行一些控Ӟ效果更好了。如果我们再一段 代码加入弹出的页?注意是加入page.html的HTML中,不是主页面中)Q让?0U后自动关闭是不是更酷了Q?<br /> 首先Q将如下代码加入page.html文g?lt;head>区: <br /> <script language="JavaScript"> <br /> function closeit() <br /> { <br /> setTimeout("self.close()",10000) //毫秒 <br /> } <br /> </script> <br /> 然后 ?lt;body onload="closeit()"> q一句话代替page.html中原有的<BODY>q一句就可以了?q一句话千万不要忘记写啊Q这一句的作用是调用关闭窗口的代码Q?0U钟后就自行关闭该窗口? <br /> <br /> ?、在弹出H口中加上一个关闭按钮?<br /> <br /> <FORM> <br /> <INPUT TYPE='BUTTON' VALUE='关闭' onClick='window.close()'> <br /> </FORM> <br /> 呵呵Q现在更加完了Q?<br /> <br /> ?、内包含的弹出窗?一个页面两个窗口?<br /> <br /> 上面的例子都包含两个H口Q一个是ȝ口,另一个是弹出的小H口。通过下面的例子,你可以在一个页面内完成上面的效果?<br /> <br /> <html> <br /> <head> <br /> <SCRIPT LANGUAGE="JavaScript"> <br /> function openwin() <br /> { <br /> OpenWindow=window.open("", "newwin", "height=250, width=250,toolbar=no ,scrollbars="+scroll+",menubar=no"); <br /> //写成一?<br /> OpenWindow.document.write("<TITLE>例子</TITLE>") <br /> OpenWindow.document.write("<BODY BGCOLOR=#ffffff>") <br /> OpenWindow.document.write("<h1>Hello!</h1>") <br /> OpenWindow.document.write("New window opened!") <br /> OpenWindow.document.write("</BODY>") <br /> OpenWindow.document.write("</HTML>") <br /> OpenWindow.document.close() <br /> } <br /> </SCRIPT> <br /> </head> <br /> <body> <br /> <a href="#" onclick="openwin()">打开一个窗?lt;/a> <br /> <input type="button" onclick="openwin()" value="打开H口"> <br /> </body> <br /> </html> <br /> <br /> 看看OpenWindow.document.write()里面的代码不是标准的HTML吗?只要按照格式写更多的行即可。千万注意多一个标{或一个标{ְ会出现错误。记得用 OpenWindow.document.close()l束啊?<br /> <br /> ?、终极应?-弹出的窗口之Cookie控制?<br /> <br /> 回想一下,上面的弹出窗口虽焉Q但是有一点小毛病Q比如你上面的脚本攑֜一个需要频J经q的面?例如首页)Q那么每ơ刷新这个页面,H口都会弹出一ơ,我们使用cookie来控制一下就可以了?<br /> 首先Q将如下代码加入主页面HTML?lt;HEAD>区: <br /> <br /> <script> <br /> function openwin(){ <br /> window.open("page.html","","width=200,height=200") <br /> } <br /> function get_cookie(Name) { <br /> var search = Name + "=" <br /> var returnvalue = ""; <br /> if (document.cookie.length > 0) { <br /> offset = document.cookie.indexOf(search) <br /> if (offset != -1) { <br /> offset += search.length <br /> end = document.cookie.indexOf(";", offset); <br /> if (end == -1) <br /> end = document.cookie.length; <br /> returnvalue=unescape(document.cookie.substring(offset, end)) <br /> } <br /> } <br /> return returnvalue; <br /> } <br /> function loadpopup(){ <br /> if (get_cookie('popped')==''){ <br /> openwin() <br /> document.cookie="popped=yes" <br /> } <br /> } <br /> </script> <br /> <br /> 然后Q用<body onload="loadpopup()">Q注意不是openwin而是loadpop啊!Q替换主面中原有的<BODY>q一句即可。你可以试着h一下这个页面或重新q入该页面,H口再也不会弹出了。真正的Pop-Only-OnceQ? <img src ="http://www.tkk7.com/junjie/aggbug/261955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/junjie/" target="_blank">wangjunjie</a> 2009-03-25 22:35 <a href="http://www.tkk7.com/junjie/archive/2009/03/25/261955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多线E理解(转蝲Q?/title><link>http://www.tkk7.com/junjie/archive/2009/03/01/257223.html</link><dc:creator>wangjunjie</dc:creator><author>wangjunjie</author><pubDate>Sun, 01 Mar 2009 06:17:00 GMT</pubDate><guid>http://www.tkk7.com/junjie/archive/2009/03/01/257223.html</guid><wfw:comment>http://www.tkk7.com/junjie/comments/257223.html</wfw:comment><comments>http://www.tkk7.com/junjie/archive/2009/03/01/257223.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/junjie/comments/commentRss/257223.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/junjie/services/trackbacks/257223.html</trackback:ping><description><![CDATA[ 对于Java开发h员,多线E应该是必须熟练应用的知识点Q特别是开发基于Java语言的品。本文将深入出的表qJava多线E的知识点,在后l的pd里将侧重于Java5由Doug Lea教授提供的Concurrentq行包的设计思想以及具体实现与应用?br />     如何才能深入出呢,我的理解是带着问题Q而不是泛泛的看。所以该pd基本以解决问题ؓ主,当然我也非常希望读者能够提出更好的解决问题的方案以及提出更多的问题。由于水qx限,如果有什么错误之处,请大家提出,共同讨论QMQ我希望通过该系列我们能够深入理解Java多线E来解决我们实际开发的问题?br />     作ؓ开发h员,我想没有必要讨论多线E的基础知识Q比如什么是U程Q?如何创徏{?Q这些知识点是可以通过书本和Google获得的。本pd主要是如何理深入解多U程来帮助我们^时的开发,比如U程池如何实玎ͼ 如何应用锁等?nbsp; <br /> <br /> Q?Q方法Join是干啥用的? 单回{,同步Q如何同步? 怎么实现的? 下面逐个回答?br />     自从接触Java多线E,一直对Join理解不了。JDK是这栯的:<br /> <!-- Generated by javadoc (build 1.6.0) on Wed Nov 29 02:21:27 PST 2006 --> <link title="Style" href="/j2se6/api/stylesheet.css" type="text/css" rel="stylesheet" /><script type="text/javascript"> function windowTitle() { if (location.href.indexOf('is-external=true') == -1) { parent.document.title="Thread (Java Platform SE 6)"; } } </script><noscript></noscript><script language="JScript" src="/j2se6/H2HHinclude.js"></script>   join<br />     public final void <strong>join</strong>(long millis)throws <a title="class in java.lang" href="http://www.tkk7.com/j2se6/api/java/lang/InterruptedException.html">InterruptedException</a><br />     Waits at most <code>millis</code> milliseconds for this thread to die. A timeout of <code>0</code> means to wait forever.<br />  大家能理解吗Q?字面意思是{待一D|间直到这个线E死亡,我的疑问是那个线E,是它本n的线E还是调用它的线E的Q上代码Q?nbsp;<br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000ff">package</span><span style="color: #000000"> concurrentstudy;<br /> </span><span style="color: #008000">/**</span><span style="color: #008000"><br />  *<br />  * </span><span style="color: #808080">@author</span><span style="color: #008000"> vma<br />  </span><span style="color: #008000">*/</span><span style="color: #000000"><br /> </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> JoinTest {<br />     </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) {<br />         Thread t </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Thread(</span><span style="color: #0000ff">new</span><span style="color: #000000"> RunnableImpl());</span><span style="color: #008000"><br /> </span><span style="color: #000000">        t.start();<br />         </span><span style="color: #0000ff">try</span><span style="color: #000000"> {<br />             t.join(</span><span style="color: #000000">1000</span><span style="color: #000000">);<br />             System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">joinFinish</span><span style="color: #000000">"</span><span style="color: #000000">);<br />         } </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (InterruptedException e) {<br />             </span><span style="color: #008000">//</span><span style="color: #008000"> TODO Auto-generated catch block</span><span style="color: #008000"><br /> </span><span style="color: #000000">            e.printStackTrace();<br />      <br />         }<br />     }<br /> }<br /> </span><span style="color: #0000ff">class</span><span style="color: #000000"> RunnableImpl </span><span style="color: #0000ff">implements</span><span style="color: #000000"> Runnable {<br /> <br />     @Override<br />     </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> run() {<br />         </span><span style="color: #0000ff">try</span><span style="color: #000000"> {<br />             System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Begin sleep</span><span style="color: #000000">"</span><span style="color: #000000">);<br />             Thread.sleep(</span><span style="color: #000000">1000</span><span style="color: #000000">);<br />            System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">End sleep</span><span style="color: #000000">"</span><span style="color: #000000">);<br />         } </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (InterruptedException e) {<br />             e.printStackTrace();<br />         }<br /> <br />     }<br /> }</span></div> l果是:<br /> Begin sleep<br /> End sleep<br /> joinFinish<br /> 明白了吧Q当mainU程调用t.joinӞmainU程{待tU程Q等待时间是1000Q如果tU程Sleep 2000?<br /> <span style="color: #000000"> </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> run() {<br />         </span><span style="color: #0000ff">try</span><span style="color: #000000"> {<br />             System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Begin sleep</span><span style="color: #000000">"</span><span style="color: #000000">);<br />             // Thread.sleep(</span><span style="color: #000000">1000</span><span style="color: #000000">);<br /> </span><span style="color: #000000">            Thread.sleep(</span><span style="color: #000000">2000</span><span style="color: #000000">);</span><br /> <span style="color: #000000">           System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">End sleep</span><span style="color: #000000">"</span><span style="color: #000000">);<br />         } </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (InterruptedException e) {<br />             e.printStackTrace();<br />         }<br /> <br />     }</span><br /> l果是:<br /> Begin sleep<br /> joinFinish<br /> End sleep<br /> 也就是说mainU程只等1000毫秒Q不T什么时候结束,如果是t.join()呢, 看代码:   <br />  public final void join() throws InterruptedException {<br />     join(0);<br />     }<br /> 是说如果是t.join() = t.join(0) 0 JDKq样说的 A timeout of <code>0</code> means to wait forever 字面意思是永远{待Q是q样吗?<br /> 其实是等到tl束后?br /> q个是怎么实现的吗Q?看JDK代码Q?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000">    </span><span style="color: #008000">/**</span><span style="color: #008000"><br />      * Waits at most <code>millis</code> milliseconds for this thread to <br />      * die. A timeout of <code>0</code> means to wait forever. <br />      *<br />      * </span><span style="color: #808080">@param</span><span style="color: #008000">      millis   the time to wait in milliseconds.<br />      * </span><span style="color: #808080">@exception</span><span style="color: #008000">  InterruptedException if any thread has interrupted<br />      *             the current thread.  The <i>interrupted status</i> of the<br />      *             current thread is cleared when this exception is thrown.<br />      </span><span style="color: #008000">*/</span><span style="color: #000000"><br />     </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">final</span><span style="color: #000000"> </span><span style="color: #0000ff">synchronized</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> join(</span><span style="color: #0000ff">long</span><span style="color: #000000"> millis) <br />     </span><span style="color: #0000ff">throws</span><span style="color: #000000"> InterruptedException {<br />     </span><span style="color: #0000ff">long</span><span style="color: #000000"> base </span><span style="color: #000000">=</span><span style="color: #000000"> System.currentTimeMillis();<br />     </span><span style="color: #0000ff">long</span><span style="color: #000000"> now </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br /> <br />     </span><span style="color: #0000ff">if</span><span style="color: #000000"> (millis </span><span style="color: #000000"><</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">) {<br />             </span><span style="color: #0000ff">throw</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> IllegalArgumentException(</span><span style="color: #000000">"</span><span style="color: #000000">timeout value is negative</span><span style="color: #000000">"</span><span style="color: #000000">);<br />     }<br /> <br />     </span><span style="color: #0000ff">if</span><span style="color: #000000"> (millis </span><span style="color: #000000">==</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">) {<br />         </span><span style="color: #0000ff">while</span><span style="color: #000000"> (isAlive()) {<br />         wait(</span><span style="color: #000000">0</span><span style="color: #000000">);<br />         }<br />     } </span><span style="color: #0000ff">else</span><span style="color: #000000"> {<br />         </span><span style="color: #0000ff">while</span><span style="color: #000000"> (isAlive()) {<br />         </span><span style="color: #0000ff">long</span><span style="color: #000000"> delay </span><span style="color: #000000">=</span><span style="color: #000000"> millis </span><span style="color: #000000">-</span><span style="color: #000000"> now;<br />         </span><span style="color: #0000ff">if</span><span style="color: #000000"> (delay </span><span style="color: #000000"><=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">) {<br />             </span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />         }<br />         wait(delay);<br />         now </span><span style="color: #000000">=</span><span style="color: #000000"> System.currentTimeMillis() </span><span style="color: #000000">-</span><span style="color: #000000"> base;<br />         }<br />     }<br />     }</span></div> 其实<strong>JoinҎ实现是通过<span style="color: #000000">waitQ小提示QObject 提供的方法)?当mainU程调用t.join时候,mainU程会获得线E对象t的锁Qwait 意味着拿到该对象的?,调用该对象的wait</span>({待旉)Q直到该对象唤醒mainU程Q比如退出后?/strong><br /> <br /> q就意味着main U程调用t.joinӞ必须能够拿到U程t对象的锁Q如果拿不到它是无法wait的,刚开的例子t.join(1000)不是说明了mainU程{待1U,如果在它{待之前Q其他线E获取了t对象的锁Q它{待旉可不是1毫秒了。上代码介绍Q?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #008000">/*</span><span style="color: #008000"><br />  * To change this template, choose Tools | Templates<br />  * and open the template in the editor.<br />  </span><span style="color: #008000">*/</span><span style="color: #000000"><br /> </span><span style="color: #0000ff">package</span><span style="color: #000000"> concurrentstudy;<br /> </span><span style="color: #008000">/**</span><span style="color: #008000"><br />  *<br />  * </span><span style="color: #808080">@author</span><span style="color: #008000"> vma<br />  </span><span style="color: #008000">*/</span><span style="color: #000000"><br /> </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> JoinTest {<br />     </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) {<br />         Thread t </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Thread(</span><span style="color: #0000ff">new</span><span style="color: #000000"> RunnableImpl());<br />        </span><span style="color: #0000ff">new</span><span style="color: #000000"> ThreadTest(t).start();<br />         t.start();<br />         </span><span style="color: #0000ff">try</span><span style="color: #000000"> {<br />             t.join();<br />             System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">joinFinish</span><span style="color: #000000">"</span><span style="color: #000000">);<br />         } </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (InterruptedException e) {<br />             </span><span style="color: #008000">//</span><span style="color: #008000"> TODO Auto-generated catch block</span><span style="color: #008000"><br /> </span><span style="color: #000000">            e.printStackTrace();<br />      <br />         }<br />     }<br /> }<br /> </span><span style="color: #0000ff">class</span><span style="color: #000000"> ThreadTest </span><span style="color: #0000ff">extends</span><span style="color: #000000"> Thread {<br /> <br />     Thread thread;<br /> <br />     </span><span style="color: #0000ff">public</span><span style="color: #000000"> ThreadTest(Thread thread) {<br />         </span><span style="color: #0000ff">this</span><span style="color: #000000">.thread </span><span style="color: #000000">=</span><span style="color: #000000"> thread;<br />     }<br /> <br />     @Override<br />     </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> run() {<br />         holdThreadLock();<br />     }<br /> <br />     </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> holdThreadLock() {<br />         </span><span style="color: #0000ff">synchronized</span><span style="color: #000000"> (thread) {<br />             System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">getObjectLock</span><span style="color: #000000">"</span><span style="color: #000000">);<br />             </span><span style="color: #0000ff">try</span><span style="color: #000000"> {<br />                 Thread.sleep(</span><span style="color: #000000">9000</span><span style="color: #000000">);<br /> <br />             } </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (InterruptedException ex) {<br />              ex.printStackTrace();<br />             }<br />             System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">ReleaseObjectLock</span><span style="color: #000000">"</span><span style="color: #000000">);<br />         }<br /> <br />     }<br /> }<br /> <br /> </span><span style="color: #0000ff">class</span><span style="color: #000000"> RunnableImpl </span><span style="color: #0000ff">implements</span><span style="color: #000000"> Runnable {<br /> <br />     @Override<br />     </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> run() {<br />         </span><span style="color: #0000ff">try</span><span style="color: #000000"> {<br />             System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Begin sleep</span><span style="color: #000000">"</span><span style="color: #000000">);<br />             Thread.sleep(</span><span style="color: #000000">2000</span><span style="color: #000000">);<br />            System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">End sleep</span><span style="color: #000000">"</span><span style="color: #000000">);<br />         } </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (InterruptedException e) {<br />             e.printStackTrace();<br />         }<br /> <br /> <br />     }<br /> }<br /> </span></div> <span style="color: #000000"><span style="color: #060000"><span style="color: #000000">在mainҎ?</span><span style="color: #0000ff">通过new</span><span style="color: #000000"> ThreadTest(t).start();实例?/span><span style="color: #000000">ThreadTest </span><span style="color: #0000ff">U程对象Q?它在</span><span style="color: #000000">holdThreadLock()Ҏ中,</span><span style="color: #000000">通过 </span><span style="color: #0000ff">synchronized</span><span style="color: #000000"> (thread)</span>Q获取线E对象t的锁QƈSleepQ?000Q后释放Q这意味着Q即?br /> mainҎt.join(1000),{待一U钟Q它必须{待<span style="color: #000000">ThreadTest </span><span style="color: #0000ff">U程释放t锁后才能q入waitҎ中,它实际等待时间是9000+1000 MS</span><br /> q行l果是:<br /> <span style="color: #0000ff">getObjectLock<br /> Begin sleep<br /> End sleep<br /> ReleaseObjectLock<br /> joinFinish<br /> <br /> 结Q?br /> 本节主要深入出join及JQO中的实现?br /> </span><span style="color: #0000ff"><a href="http://www.tkk7.com/vincent/archive/2008/08/24/223933.html">在下一节中Q我们将要讨论SWing 中的事gҎU程来解决一个网友问到的问题Q?/a><br /> 如何控制SwingE序在单机只有一个实例,也就是不能运行第二个MainҎ?/span></span></span><span style="color: #0000ff"><br /> <br /> </span> <img src ="http://www.tkk7.com/junjie/aggbug/257223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/junjie/" target="_blank">wangjunjie</a> 2009-03-01 14:17 <a href="http://www.tkk7.com/junjie/archive/2009/03/01/257223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转蝲 Soalries中常用命?/title><link>http://www.tkk7.com/junjie/archive/2009/02/15/254789.html</link><dc:creator>wangjunjie</dc:creator><author>wangjunjie</author><pubDate>Sun, 15 Feb 2009 11:24:00 GMT</pubDate><guid>http://www.tkk7.com/junjie/archive/2009/02/15/254789.html</guid><wfw:comment>http://www.tkk7.com/junjie/comments/254789.html</wfw:comment><comments>http://www.tkk7.com/junjie/archive/2009/02/15/254789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/junjie/comments/commentRss/254789.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/junjie/services/trackbacks/254789.html</trackback:ping><description><![CDATA[<h3><span style="font-family: 宋体">pȝ基本配置</span> </h3> <p><span style="font-family: 宋体">如何查看日志信息</span>                 dmesg | more /var/adm/messages*    </p> <p><span style="font-family: 宋体">攉</span> exlpore <span style="font-family: 宋体">日志</span>                  /opt/SUNWexplo/bin/explorer -k ->/opt/SUNWexplo/output </p> <p><span style="font-family: 宋体">pȝ的基本状?/span>                            showrev </p> <p><span style="font-family: 宋体">pȝq行旉Q^均负?/span>                                  uptime                            </p> <p><span style="font-family: 宋体">版本信息</span>                                                uname -a                                  </p> <p>Update <span style="font-family: 宋体">版本</span>                                          more /etc/release                 </p> <p><span style="font-family: 宋体">pȝ补丁</span>       showrev -p <span style="font-family: 宋体">已安装的补丁信息</span>  patchadd 123-12 <span style="font-family: 宋体">打补?/span> </p> <p><span style="font-family: 宋体">查看服务对应的端?/span>  more /etc/services </p> <p><span style="font-family: 宋体">pȝ变量讄</span> env <span style="font-family: 宋体">Q?/span> sysdef </p> <p>Shell <span style="font-family: 宋体">变量Q?/span> bash,csh,ksh </p> <p><span style="font-family: 宋体">攉</span> explore <span style="font-family: 宋体">日志</span> </p> <p style="margin-left: 21pt"><span style="font-family: 宋体">先查看有没有?/span> <br /> # pkginfo |grep SUNWexplo<br /> <span style="font-family: 宋体">如果有安装的话:</span> <br /> # /opt/SUNWexplo/bin/explorer<br /> <span style="font-family: 宋体">攉到的文g在:</span> <br /> # /opt/SUNWexplo/output </p> <p><span style="font-family: 宋体">清空日志Q?/span> cp /var/adm/messages /var/adm/messages.bkp  #cat /dev/null > /var/adm/messages </p> <h3><span style="font-weight: normal; font-family: 'Calibri','sans-serif'">CPU</span>   </h3> <p>psrinfo -vp              <span style="font-family: 宋体">pȝ</span> cpu <span style="font-family: 宋体">数和速度</span> </p> <p>uptime                   cpu <span style="font-family: 宋体">q_负蝲</span> </p> <p>prstat -a                <span style="font-family: 宋体">实时q程的状?/span> </p> <p>ps -ef                   <span style="font-family: 宋体">昄所有进E的详细信息</span> </p> <p>kill pid <span style="font-family: 宋体">杀死进E?/span> </p> <p>vmstat <span style="font-family: 宋体">Q?/span> mpstat <span style="font-family: 宋体">Q?/span> /usr/ucb/ps -aux </p> <h3><span style="font-family: 宋体">内存</span> </h3> <p>prtdiag -v <span style="font-family: 宋体">pȝgQ电源接口等</span> </p> <p><span style="font-family: 宋体">查看内存大小</span> prtconf -vp | grep Mem </p> <p>vmstat </p> <p>swap -s </p> <p><span style="font-family: 宋体">增加</span> swap <span style="font-family: 宋体">分区Q?/span> mkfile 200m /tmp ,swap -a,swap -l </p> <p>C5292 </p> <h3><span style="font-family: 宋体">盘理</span> </h3> <p>iostat <span style="font-family: 宋体">监视pȝ输入Q输备负?/span> </p> <p>format <span style="font-family: 宋体">pȝ几块盘Q大?/span> Ctrl+D <span style="font-family: 宋体">的组合键退?/span> </p> <p>metastat <span style="font-family: 宋体">昄盘</span> raid <span style="font-family: 宋体">状?/span> </p> <p><span style="font-family: 宋体">查硬盘信?/span> prtvtoc /dev/dsk/c0t0d0s5 </p> <p><span style="font-family: 宋体">查看</span> NBU <span style="font-family: 宋体">盘</span> available_media </p> <p><span style="font-family: 宋体">如何d盘</span> </p> <p style="text-indent: 21pt">1 <span style="font-family: 宋体">Q?/span> mkdir /usr/ldap3</p> <p style="text-indent: 21pt">2 <span style="font-family: 宋体">Q?/span> newfs /dev/rdsk/c1t3d0s1 </p> <p>       3 <span style="font-family: 宋体">Q?/span> mount /dev/dsk/c1t3d0s1 /usr/ldap3 </p> <p style="text-indent: 21pt">4 <span style="font-family: 宋体">Q?/span> vi /etc/vfstab <span style="font-family: 宋体">d文gpȝ信息</span> </p> <p style="text-indent: 21pt">/dev/dsk/c1t2d0s0  /dev/rdsk/c1t2d0s0   /usr/ldap3      ufs     1 yes     logging<br />  </p> <h3><span style="font-family: 宋体">文gpȝ</span> </h3> <p>df -k   <span style="font-family: 宋体">盘使用情况</span> </p> <p><span style="font-family: 宋体">带机的d数据</span> : tar cpio </p> <p><span style="font-family: 宋体">带机状?/span>  mt -f /dev/rmt/0 status </p> <p><span style="font-family: 宋体">虚拟文gpȝ?/span>  /etc/vfstab </p> <p>Solaris <span style="font-family: 宋体">盘分区</span> </p> <h3><span style="font-family: 宋体">|络</span> </h3> <p>ping <span style="font-family: 宋体">Q?/span> netstat -arp <span style="font-family: 宋体">Q?/span> </p> <p>ifconfig –a </p> <h3><span style="font-family: 宋体">pȝ基本操作</span> </h3> <h3><span style="font-family: 宋体">文g操作</span> </h3> <p><span style="font-family: 宋体">压羃解压</span> tar gzip gunzip </p> <p>iso <span style="font-family: 宋体">文g</span>  lofiadm </p> <p><span style="font-family: 宋体">查看文g信息</span>  ls -lrt </p> <p><span style="font-family: 宋体">目录大小</span>  du -sk dir </p> <p>mkdir ,cd, </p> <p><span style="font-family: 宋体">查找文gQ?/span> Find <span style="font-family: 宋体">文gcd</span> file </p> <p><span style="font-family: 宋体">查看文g</span> more <span style="font-family: 宋体">Q?/span> head <span style="font-family: 宋体">Q?/span> tail <span style="font-family: 宋体">Q?/span> cat <span style="font-family: 宋体">例如Q?/span> tail -10 /var/adm/messages </p> <p><span style="font-family: 宋体">文g的权?/span> chmod: chmod 644 a.txt </p> <p><span style="font-family: 宋体">解包</span> tar vcf filename.tar </p> <p><span style="font-family: 宋体">打包</span> tar cvf filename.tar dirname </p> <p>.gz <span style="font-family: 宋体">文g</span> <span style="font-family: 宋体">解压</span> gunzip filename.gz ; gzip -d filename.gz           <span style="font-family: 宋体">压羃</span> gzip filenam </p> <p>.tar.gz <span style="font-family: 宋体">解压Q?/span> tar zxcf file.tar.gz                                     <span style="font-family: 宋体">压羃Q?/span> tar zcvf file.tar.gz dirname </p> <p><span style="font-family: 宋体">创徏和编辑文Ӟ</span> </p> <p><span style="font-family: 宋体">生成新文件或改变文g日期Q?/span> Touch   <span style="font-family: 宋体">文g拯</span> cp <span style="font-family: 宋体">Ud文g</span> mv </p> <p><span style="font-family: 宋体">修改文gQ?/span> vi<span style="font-family: 宋体">的用?/span></p> <p><span style="font-family: 宋体">l合命o</span> : <span style="font-family: 宋体">Q?/span> <span style="font-family: 宋体">输出重定?/span> >   <span style="font-family: 宋体">l合命o</span> | </p> <p><span style="font-family: 宋体">常用理命o</span> man </p> <h3><span style="font-family: 宋体">用户理</span> </h3> <p>groupadd <span style="font-family: 宋体">Q?/span> useradd <span style="font-family: 宋体">Q?/span> passwd </p> <p><span style="font-family: 宋体">查看用户</span> / <span style="font-family: 宋体">l?/span> more /etc/passwd <span style="font-family: 宋体">Q?/span> /etc/shadow <span style="font-family: 宋体">Q?/span> /etc/group </p> <p>(who <span style="font-family: 宋体">?/span> finger <span style="font-family: 宋体">?/span> rusers <span style="font-family: 宋体">Q?/span> 1 <span style="font-family: 宋体">?/span> whodo <span style="font-family: 宋体">?/span> id </p> <p><strong><span style="font-family: 宋体">如何做系l硬件健L冉|?/span> </strong></p> <p># more /var/adm/messages* <span style="font-family: 宋体">Q没有重大异常报错)</span> </p> <p># df –k (“/” <span style="font-family: 宋体">使用率小?/span> 85%) </p> <p># format <span style="font-family: 宋体">Q?/span> ctrl+d<span style="font-family: 宋体">退出)Q所有硬盘正常)</span></p> <p># prtdiag –v ( <span style="font-family: 宋体">没有</span> failed <span style="font-family: 宋体">的部件、内存和</span> cpu <span style="font-family: 宋体">数量正确</span> ) </p> <p># psrinfo –v ( <span style="font-family: 宋体">pȝ中所有的</span> cpu <span style="font-family: 宋体">都处?/span> online <span style="font-family: 宋体">状?/span> ) </p> <p><strong><span style="font-family: 宋体">q行U别</span> </strong></p> <p><span style="font-family: 宋体">查看pȝ的运行、日期及旉</span>   who   –r </p> <p><span style="font-family: 宋体">pȝq行U别</span> 1 <span style="font-family: 宋体">?/span> <span style="font-family: 宋体">掉电Q运行</span> 0 <span style="font-family: 宋体">Q?/span> 2 <span style="font-family: 宋体">?/span> <span style="font-family: 宋体">单用Pq行U?/span> 1 <span style="font-family: 宋体">?/span> s <span style="font-family: 宋体">?/span> S <span style="font-family: 宋体">Q?/span> </p> <p>3 <span style="font-family: 宋体">?/span> <span style="font-family: 宋体">多用Pq行U?/span> 2 <span style="font-family: 宋体">?/span> 3 <span style="font-family: 宋体">Q?/span> 4 <span style="font-family: 宋体">?/span> <span style="font-family: 宋体">重引|q行U?/span> 5 <span style="font-family: 宋体">?/span> 6 <span style="font-family: 宋体">Q?/span> </p> <p><span style="font-family: 宋体">重新启动</span>  reboot, init 6 </p> <p><span style="font-family: 宋体">关闭pȝQ?/span> shutdown <span style="font-family: 宋体">Q?/span> init 0 <span style="font-family: 宋体">Q?/span> halt </p> <h2><span style="font-family: 宋体">其它理</span> </h2> <p><span style="font-family: 宋体">定时d</span> </p> <p><span style="font-family: 宋体">?/span> crontab  <span style="font-family: 宋体">推到一个自定义的文件上</span> <br /> crontab -l>tmp <br /> <span style="font-family: 宋体">~辑q个文gQ做需要的修改</span> <br /> vi tmp <br /> <span style="font-family: 宋体">推回</span> crontab <br /> crontab tmp </p> <h3>NBU <span style="font-family: 宋体">备䆾</span> </h3> <p>#bpdbjobs –report   <span style="font-family: 宋体">查作业备份情况,q回?/span> 0 <span style="font-family: 宋体">即ؓ正常</span> </p> <p>#bpps –a   <span style="font-family: 宋体">备䆾q程启动情况</span> </p> <h3><span style="font-family: 宋体">盘阵列理</span> </h3> <p> #sccli </p> <p>sccli: selected device /dev/rdsk/c2t0d0s2 [SUN StorEdge yyyy SN#08472F] </p> <p>#sccli> show disks </p> <p><span style="font-family: 宋体">输出?/span> Status <span style="font-family: 宋体">列,所有值正常情况下?/span> ” ONLINE” <span style="font-family: 宋体">?/span> ” STAND-BY” <span style="font-family: 宋体">Q其它的值都是不正常的;</span> </p> <p>#sccli> show logical-drives </p> <p><span style="font-family: 宋体">输出?/span> Status <span style="font-family: 宋体">列,其值正常情况下?/span> ” Good” <span style="font-family: 宋体">Q其它的值都是不正常的;</span> </p> <p>#sccli>show enclosure-status </p> <p><span style="font-family: 宋体">输出?/span> Status <span style="font-family: 宋体">列,所有值正常情况下?/span> ” OK” <span style="font-family: 宋体">或?/span> ” Absent” <span style="font-family: 宋体">Q其它的值都是不正常的;</span> </p> <p>#sccli>show FRUs </p> <p><span style="font-family: 宋体">输出?/span> FRU Status <span style="font-family: 宋体">行,所有值正常情况下?/span> ”OK” <span style="font-family: 宋体">Q?/span> <span style="font-family: 宋体">其它的值都是不正常的;</span> </p> <p>#sccli> show peripheral-device-status </p> <p><span style="font-family: 宋体">输出?/span> status <span style="font-family: 宋体">列,所有值正常情况下?/span> ”within safety range” <span style="font-family: 宋体">?/span> ” N/A” <span style="font-family: 宋体">?/span> ” Hardware:N/A” <span style="font-family: 宋体">?/span> ” Hardware:OK” <span style="font-family: 宋体">Q?/span> <span style="font-family: 宋体">其它的值都是不正常的;</span> </p> <p>#sccli>exit </p> <p>oracle </p> <p>lsnrctl status <span style="font-family: 宋体">查看</span> listener <span style="font-family: 宋体">q程的状?/span> </p> <p>tnsping SID    <span style="font-family: 宋体">查看q通请?/span> </p> <p>sun cluster </p> <p>scinstall -pv <span style="font-family: 宋体">版本信息</span> </p> <p>luxadm -e port <span style="font-family: 宋体">光纤链\状?/span> </p> <img src ="http://www.tkk7.com/junjie/aggbug/254789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/junjie/" target="_blank">wangjunjie</a> 2009-02-15 19:24 <a href="http://www.tkk7.com/junjie/archive/2009/02/15/254789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL高查询Q{载)http://www.tkk7.com/junjie/archive/2008/12/19/247325.htmlwangjunjiewangjunjieFri, 19 Dec 2008 05:57:00 GMThttp://www.tkk7.com/junjie/archive/2008/12/19/247325.htmlhttp://www.tkk7.com/junjie/comments/247325.htmlhttp://www.tkk7.com/junjie/archive/2008/12/19/247325.html#Feedback0http://www.tkk7.com/junjie/comments/commentRss/247325.htmlhttp://www.tkk7.com/junjie/services/trackbacks/247325.html

transact---sql高查询Q下Q?br /> 5:使用having关键字来{选结?br /> 6:使用compute和compute by子句
7:使用嵌套查询
8:分布式查?/p>

E:使用having关键字来{选结?br />     当完成对数据l果的查询和l计?可以使用having关键字来Ҏ询和计算的结果进行一步的{?br />       ?索出work表中学历是大专或者是中专的h?br />           select 学历,count(学历) from work group by 学历 having 学历 in("'大专"',"'中专"')
          说明:1:having关键字都与group by用在一?
               2:having不支持对列分配的别名
          例如:select 学历,"'大于5的h?'=count(学历) from work group by 学历 having 大于5的h?gt;5 [错错]
          改ؓ:select 学历,"'大于5的h?'=count(学历) from work group by 学历 having count(学历)>5

F:使用compute和compute by
  使用compute子句允许同时观察查询所得到各列的数据的l节以及l计各列数据所产生的汇d
      select * from work [查询所得到的各列的数据的细节]
      compute max(基本工资),min(基本工资) [l计之后的结果]
  q个例子中没有用by关键?q回的结果是最后添加了一行基本工资的最大值和最?也可增加by关键?
        ?select * from work order by 学历
           compute max(基本工资),min(基本工资) by 学历
        比较:select 学历,max(基本工资),min(基本工资) from work group by 学历
        说明:1:compute子句必须与order by子句用在一?br />              2:compute子句可以q回多种l果?一U是体现数据l节的数据集,可以按分c要求进行正的分类Q另一U在分类的基上进行汇M生结?
             3:而group by子句Ҏ一cL据分cM后只能生一个结?不能知道l节

G:使用嵌套查询
  查询中再查询,通常是以一个查询作为条件来供另一个查询?br />       ?有work表和部门?br />          A:索出在部门表中登记的所有部门的职工基本资料
           select * from work where 部门~号 in [not in](select 部门~号 from dbo.部门)
         B:索出在work表中每一个部门的最高基本工资的职工资料
           select * from work a where 基本工资=(select max(基本工资) from work b where a.部门名称=b.部门名称)
           说明:由外查询提供一个部门名U给内查?内查询利用这个部门名U找到该部门的最高基本工?然后外查询根据基本工资判断是否等于最高工?如果是的,则显C出?
           相当?select * from work,(select 部门名称,max(基本工资) as 基本工资 from work group by 部门名称 as t) where work.基本工资=t.基本工资 and work.部门名称=t.部门名称
         C:用嵌套work表和嵌套部门?在嵌套work表中索出姓名和职工号都在嵌套部门存在的职工资?
           select * from 嵌套work where 职工?in (select 职工?from 嵌套部门) and 姓名 in (select 姓名 from 嵌套部门) [察看l果,分析原因]
           ?select * from 嵌套work a,嵌套部门 b where a.职工?b.职工?and a.姓名=b.姓名
           ?select * from 嵌套work where 职工?(select 职工?from 嵌套部门) and 姓名=(select 姓名 from 嵌套部门) [行吗?Z?分析原因?]

在嵌套中使用exists关键字[存在]
?1:用嵌套work表和嵌套部门?在嵌套work表中索出姓名和职工号都在嵌套部门存在的职工资?
     select * from 嵌套work a where exists (select * from 嵌套部门 b where a.姓名=b.姓名 and a.职工?b.职工?
   2:在work表检索出在部门表没有的职?br />      select * from work where not exists (select * from 部门 where 部门.部门~号=work.部门~号)
     能否Ҏ:select * from work where exists (select * from 部门 where 部门.部门~号<>work.部门~号)
                      
在列清单中用select
?1:在work1表和部门表中索出所有部门的部门名称和基本工资d
    select 部门名称,(select sum(基本工资) from work1 b where a.部门~号=b.部门~号) from 部门 a
   2:索各部门的职工h?br />     select 部门~号,部门名称,(select count(职工? from work1 a where a.部门~号=b.部门~号) as 人数 from 部门 b
   3:在商品表和销售表中查询每一职工的姓?所属部?销售总量                  
    select 姓名,所属部?(select sum(销售量) from 商品销?a where a.职工?b.职工? as 销售总量 from 嵌套部门 b

H:分布式查?br /> 我们以前的查询都只是Z一个服务器中的一个数据库的查?如果一个查询是要跨一个服务器,像这L查询是分布式查?那么我们以看到分布查询就是数据源自于两个服务?要进行分布式查询必须先创Z?#8220;链接服务?#8221;,以便让本地的用户能够映射到过E服务器.
“链接服务?#8221;的创?br />      A:?#8220;链接服务?#8221;里面输入以后Z方便讉K该链接服务器的名U[L]
     B:?#8220;提供E序名称”里面选择“Microsoft OLE DB Provider for SQL Server”
     C:?#8220;数据?#8221;里面输入服务器的|络?br />      D:本地d,q程用户和远E密码里面分别输入一个本地登录用?q程d和远E密码以便让本地SQL Serverd映射为链接服务器上的用户
     E:讉KҎ:格式:链接服务器的名称.数据库名.dbo.表名
       链接服务器有两个特点:
           1:通过链接服务器不能删除链接源服务器的M对像.
           2:能过链接服务器可以对链接源服务器的表q行insert,updae,delete操作.

 


视图
1:什么是视图
2:视图和查询的区别
3:视图的优?br /> 4:如何创徏和管理视?br /> 5:如何通过视图修改基本表的数据
6:如何通过视图实现数据的安全?/p>

A:什么是视图:
视图(view):从一个或几个基本表中Ҏ用户需要而做成一个虚?br />     1:视图是虚?它在存储时只存储视图的定?而没有存储对应的数据
    2:视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,q展现给用户

B:视图与查询的区别:
视图和查询都是用由sql语句l成,q是他们相同的地?但是视图和查询有着本质区别:
它们的区别在?1:存储上的区别:视图存储为数据库设计的一部分,而查询则不是.
              2:更新限制的要求不一?br />                 要注?因ؓ视图来自于表,所以通过视图可以间接对表q行更新,我们也可以通过update语句对表q行更新,但是对视囑֒查询更新限制是不同的,以下我们会知道虽焉过视图可以间接更新表但是有很多限制.
              3:排序l果:通过sql语句,可以对一个表q行排序,而视囑ֈ不行.
                比如:创徏一个含有order by子句的视?看一下可以成功吗?

C:视图的优? 
Z么有了表q要引入视图呢?q是因ؓ视图h以下几个优点:
1:能分割数?化观?br />   可以通过select和where来定义视?从而可以分割数据基表中某些对于用户不关心的数据,使用h注意力集中到所兛_的数据列.q一步简化浏览数据工?
2:为数据提供一定的逻辑独立?br />   如果为某一个基表定义一个视?即以后基本表的内容的发生改变了也不会媄?#8220;视图定义”所得到的数?br /> 3:提供自动的安全保护功?br />   视图能像基本表一h予或撤消讉K许可?
4:视图可以间接对表q行更新,因此视图的更新就是表的更?/p>

D:视图的创建和理
  视图的创?br />   1:通过sql语句
    格式:create view 视图?as select 语句
         试一?分别创徏关于一个表或多个表的视图[因ؓ视图可以来自于多表]
  2:通过企业理?nbsp; 
    说明:1:在完成视囄创立之后,可以像使用基本表一h使用视图
         2:在创图时,q所有的select子查询都可用
           ?compute和compute by,order by[除非与top一赯用] 
         3:但在查询?依然都可以用在创建时用的select子查?br />          4:在视囑ֈ建时,必须为没有标题列指定标题[思?能否不用select语句来创Z个视图]
 
  视图的删?
  1:通过sql语句:drop view 视图?br />   2:通过企业理?br />     说明:与删除表不同的是,删除视图后只是删除了视图了定?q没有删除表中的数据.[查看相关性]
 
  修改视图的定?br />   1:通过企业理?br />   2:通过sql语句:
    格式:alter view 视图?as 新的select语句

览视图信息 sp_helptext 视图?[查看视图创徏的语句]

E:如何通过视图修改基本表的数据.
  1:在视图上使用insert语句
    通过视图插入数据与直接在表中插入数据一?但视图毕竟不是基本表.因此在进行数据插入时q是有一定的限制
      1:如果视图上没有包括基本表中属性ؓnot null[不能为空]的列,那么插入操作会因为那些列是nullD失?
      2:如果某些列因为某些规则或U束的限制而不能直接接受从视图插入的列?插入会失?br />       3:如果在视图中包含了用统计函数的l果,或是包含计算?则插入操作会p|
      4:不能在用了distinct语句的视图中插入?br />       5:不能在用了group by语句的视图中插入?/p>

  2:使用update更新视图中的数据
       1:更新视图与更新表g?但是在视图中使用了多个基本表q接的情况下,每次更新操作只能更新来自基本表的一个数据列
         例如:创徏以下视图:create view del as
                          select 职工?姓名,部门名称,负责?from work1,部门
                          where work1.部门~号=部门.部门~号
              如果再执行下面的语句?
                        update del set 职工?"'001"',部门名称="'wenda"' where 职工?"'01"'[出现错误]
              只能够改?update del set 职工?"'001"' where 职工?"'01"'
                        update del set 部门名称="'wenda"' where 职工?"'01"'
       2:不能在用了distinct语句的视图中更新?br />        3:不能在用了group by语句的视图中更新?br />  
  3:使用delete删除视图中数?
    通过视图删除数据最l体Cؓ从基本表中删除数?br />     格式:delete 视图?[where 条g]
    说明:当视囄两个以上的基表构成时,不允许删除视囄数据
    例如:Z个视图kk
         create view kk as
         select 职工?姓名,性别,部门名称 from work1,部门 where work1.部门~号=部门.部门~号 [试着d除]

    使用with check option的视?br />     如果不了解视囑֮义内?则常怼发生向视图中输入不符合视囑֮义的数据的情?
    比如:create view xm as
         select * from work where 性别="'?'
         完全可以插入insert xm values("'001"',"'?',23,"'2400"'....)
管从意义上来说是不合理?但是上述语句是正的.Z防止q种情况的发?可以使用with check option子句来对插入的或更改的数据进行限?
    比如:create view xm as
         select * from work where 性别="'?' with check option

    使用schemabinding的视图[使用l定到构架]
我们知道视图是依赖于?如果在一个表中创Z个视?今后如果q个表被删除?则这个视囑ְ不可再用?Z防止用户删除一个有视图在引用的?可以在创囄时候加上schemabinding关键?
    比如:create view 基本工资 with SCHEMABINDING
         as select 姓名,性别,基本工资 from dbo.work
    说明:1:不能使用“*”来创建此cd的视?br />          2:创徏此类型的视图?一定要加上dbo.表名.
         3:如果在某个表中定义了此类视图,则用户将不能对表的结构进行修?否则会删除这些绑?br />          4:如果用户对表的结构进行列改名,则会删除l定而且视图不可?
         5:如果用户对表的结构进行列的类型或者大修?则会删除l定但视囑֏?此时用户可以删除视图所引用的表.
  
    使用with encryption对视图进行加?br /> Z保护创徏视图定义的原代码,可以对视图进行加?
    比如:create view kk with encryption
         as select * from work where 职称="'l理"'
    用sp_helptext来查看一?或用企业理器查看一?
    说明:如果应用此项用户无法设计视?/p>

F:使用视图加强数据的安?br />   一般通过使用视图共有三种途径加强数据的安全?nbsp;   
     A:对不同用h予不同的使用?
     B:通过使用select子句限制用户Ҏ些底层基表的列的讉K
     C:通过使用where子句限制用户Ҏ些底层基表的行的讉K
  对不同用h予不同的权限



wangjunjie 2008-12-19 13:57 发表评论
]]>
操作数据库应该养成的好习惯(转蝲Q?/title><link>http://www.tkk7.com/junjie/archive/2008/12/19/247317.html</link><dc:creator>wangjunjie</dc:creator><author>wangjunjie</author><pubDate>Fri, 19 Dec 2008 05:18:00 GMT</pubDate><guid>http://www.tkk7.com/junjie/archive/2008/12/19/247317.html</guid><description><![CDATA[<p>我们开发的pȝ中,数据是最重要的一部分Q如果程序的代码错了Q我们可以通过各种方式修改回来Q但如果数据q了,永q无法还原,那种Ʋ哭无泪的滋呻I怿l历q的人是深有体会的。可能这些小的细节对我们来说都是微不道的,但往往q些微不道而且是小概率的事件将会毁了你?br />         记得刚开始工作的时候,我们目l的几个人对某个市的数据q行操作Q由于自q一个不心Q写错了一个SQL把其中一部分的数据给毁了Q那时候心理真的很隑֏Q多么希望有个h可以骂骂我,臛_心理会好受一点,但是没有人理我,q样一直在水深火热q中Q感觉自己已l到了地׃般。经q多q程序生涯,在地׃也得C一些成长,于是把自q一点用金钱换来的经验全盘托出,希望对一些朋友有所帮助?br /> <br /> <br /> <br /> <br /> 1、不要用Truncate Table语句。刚开始学q个语句的时候,怿很多人多会拿出来跑一跑,会很高兴地向同事证明你的Truncate Table比Delete跑得更快Q但是如果你Lq样的习惯,万一有一天误删东西的时候,p原不回来了,因ؓTruncate Table不会记录日志Q所以,如果操作重要数据的时候,q是用回Delete语句吧?br /> <br /> 2、每ơ动数据库之前,都先要把数据库备份v来。这个习惯一定要LQ你操作数据库的时候,哪怕只是做一ơ简单的查询或只是删除几条普通的数据Q都先备份一下,不会׃很多旉Q却在你p的时候可以把你从M的边~拉回来。如果数据比较大Q至也要把表里的数据备份出来?br /> <br /> 3、把删除语句以及更新语句、插入语句注释掉。我们操作数据库Ӟ通常都喜Ƣ在查询分析器里写一大堆SQLQ然后选择某一条,按F5来执行,但有时候会直接按下F5Q导致所有的语句都执行,l数据造成一定的损害。如果你把那些有影响的语句注释掉了,q按错了也没有关系?br /> <br /> <br /> 4、不要随便地dL据库。如果我们要获取整个数据库的数据Ӟ量采用把数据备份下来,然后取到其他机器上还原,而不要把数据库分,然后再复制到其它机器附加。有时候,数据库分M之后׃造成无法附加Q虽然概率很,但一旦碰上了׃很麻烦,其是一些实时的pȝ?br /> <br /> 5、自׃熟悉的数据库Q不要去动它。我们维护数据库Ӟ有时候要 出差到其他市L作数据,q时Q其他项目组的同事可能会叫你帮忙更新q个更新那个的,如果你很熟悉数据库的l构Q以及了解更新的影响E度Q那么你帮忙操作无所谓,如果你不熟悉Q尽量不操作Q如果你做好了,功劳不是你的Q如果出了什么差错,你就要背黑锅了?br /> <br /> 6、n体疲x不要操作数据库。加班是E序员的家常侉KQ当你加班到w体很疲xQ操作数据库p的概率会很大Q我记得刚刚出来工作时有一ơ我写了一个DELETE语句Q选择执行了居然漏选了一个WHERE条gQ还好数据比较多Q超时了Q要不然?........<br /> <br /> 7、如果自己对数据库结构了解很透彻Q而且你的数据库技术水q_l达C定的高度Q更加要心了,通常出现误操作导致数据失真就是这个阶D,有时候学了一个新语法׃马上拿去试着使用?br /> <br /> 8、经常要考虑你的SQL脚本有没有什么漏z,或者有没有其他Ҏ可以更有效率地执行?br /> <br /> <br /> 9、SQL SERVER2000里面有一个宝藏,是它的联机丛书Q徏议经常去阅读它,当你把它dq理解之后,你的SQL水^基本可以超80%的程序员了,Ҏ不要去迷信什么NB的教材,但到了那个时候,你会发现自己懂的东西了Q要学习的东西更多了?br /> <br />      先ȝ到这里,如果大家有什么好的经验或Q请多多提出Q大家共同交!</p> <img src ="http://www.tkk7.com/junjie/aggbug/247317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/junjie/" target="_blank">wangjunjie</a> 2008-12-19 13:18 <a href="http://www.tkk7.com/junjie/archive/2008/12/19/247317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SSH异常ȝhttp://www.tkk7.com/junjie/archive/2008/12/16/246643.htmlwangjunjiewangjunjieTue, 16 Dec 2008 07:55:00 GMThttp://www.tkk7.com/junjie/archive/2008/12/16/246643.htmlhttp://www.tkk7.com/junjie/comments/246643.htmlhttp://www.tkk7.com/junjie/archive/2008/12/16/246643.html#Feedback0http://www.tkk7.com/junjie/comments/commentRss/246643.htmlhttp://www.tkk7.com/junjie/services/trackbacks/246643.html1.HIBERNATE异常
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.InvalidMappingException: Could not parse mapping document from input stream
Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from input stream
 at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:508)
 at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:656)
 at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:134)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1203)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1172)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:427)
 at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:285)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
 at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:122)
 at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:66)
 at cn.qdqn.ssh.test.AddUserInfo.main(AddUserInfo.java:25)
Caused by: org.dom4j.DocumentException: \G1:\JAR\hibernate-mapping-3.0.dtd (文g名、目录名或卷标语法不正确? Nested exception: \G1:\JAR\hibernate-mapping-3.0.dtd (文g名、目录名或卷标语法不正确?
 at org.dom4j.io.SAXReader.read(SAXReader.java:484)
 at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:499)
 ... 14 more

异常cdQHiBERNATE中的xml解析器不能找到DTD文g
异常原因Q因为hibernate的xml解析器解?xml文g的时候需要根据文档头?DOCTYPELDTD定义文g
查看你定义的.xml文g是有效?br /> 解决ҎQ正配|DTD文g的\?/p>

wangjunjie 2008-12-16 15:55 发表评论
]]>
վ֩ģ壺 츾ëXXXX| һѿ| Ʒ_˳߸| ŮƵƵa| ˳վ߸| ҳַѹۿ| ޾Ʒtvþþþ| ˳ֻˬƵߵӰ| һƵ| ŮҼxx00Ƶ| yy6080þ޾Ʒ| һëƬڲ| ޾ƷþþþþҲ | պӰ| ˴WWW| AëƬA| һĻ| ҹӰձŷ޾Ʒһ| þѶƷ˾ | ѻɫַվ| jizz| ҹavƵ| ҹþAAAAAëƬѿ| ŷƷһ| þþƷ˳| ŷպĸwww777| ѹۿaƬվ| һaƬþëƬѿ| | ѲƵ| ɫav| ޹ۺһ| ߹ۿ˳Ƶɫ| Ƶվѹۿ| v۵Ӱ| ԲaëƬ| һëƬڵȫ| ߹ۿһ| ѹۿëƬƵ| ɫվapp߹ۿ| ass**ëpics|