??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品日日躁夜夜躁欧美,久久人人爽人人人人爽AV,亚洲七七久久精品中文国产http://www.shnenglu.com/Khan/category/776.html路O漫,长修q,我们不能没有?/description>zh-cnTue, 20 May 2008 15:04:24 GMTTue, 20 May 2008 15:04:24 GMT60linux下执行java的脚?/title><link>http://www.shnenglu.com/Khan/archive/2008/05/06/49008.html</link><dc:creator>Khan's Notebook</dc:creator><author>Khan's Notebook</author><pubDate>Tue, 06 May 2008 07:26:00 GMT</pubDate><guid>http://www.shnenglu.com/Khan/archive/2008/05/06/49008.html</guid><wfw:comment>http://www.shnenglu.com/Khan/comments/49008.html</wfw:comment><comments>http://www.shnenglu.com/Khan/archive/2008/05/06/49008.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Khan/comments/commentRss/49008.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Khan/services/trackbacks/49008.html</trackback:ping><description><![CDATA[<br><font face="monospace"><font color="#0000ff">#!/bin/sh</font><br><font color="#0000ff"># Filename : StockDispatch</font><br><font color="#0000ff"># & nohub</font><br># 思\: 遍历当前目录?JAVA_HOME/lib下所有的jar文g, 加入-cp的环境变?然后执行入口c?br><font color="#008080">SETCOLOR_BOLD</font>=<font color="#804040"><strong>"</strong></font><font color="#ff00ff">echo -en </font><font color="#6a5acd">\\</font><font color="#ff00ff">033[1;32m</font><font color="#804040"><strong>"</strong></font><br><font color="#008080">SETCOLOR_NORMAL</font>=<font color="#804040"><strong>"</strong></font><font color="#ff00ff">echo -en </font><font color="#6a5acd">\\</font><font color="#ff00ff">033[0;39m</font><font color="#804040"><strong>"</strong></font><br><br><font color="#008080"><br>CLASSPATH</font>=<font color="#804040"><strong>""</strong></font><br><font color="#008080">CURRDIR</font>=<font color="#804040"><strong>"</strong></font><span style="background-color: #ff0000;"><font color="#ffffff">$(</font></span><font color="#804040"><strong>pwd</strong></font><span style="background-color: #ff0000;"><font color="#ffffff">)</font></span><font color="#804040"><strong>"</strong></font><br><font color="#008080">LIBDIR</font>=<font color="#804040"><strong>"</strong></font><font color="#a020f0">$CURRDIR</font><font color="#ff00ff"> /usr/local/jdk1.5.0_02/lib</font><font color="#804040"><strong>"</strong></font><br><font color="#008080">tmpFile</font>=./<font color="#ff00ff">11</font><br><font color="#008080">pidFile</font>=./<font color="#a020f0">${</font><font color="#a020f0">0</font><font color="#a020f0">}</font>pid<br><br><font color="#0000ff"># find all jar library from current dir and CLASSPATH</font><br>find <font color="#a020f0">$LIBDIR</font> <font color="#6a5acd">-name</font> <font color="#804040"><strong>"</strong></font><font color="#ff00ff">*.jar</font><font color="#804040"><strong>"</strong></font><font color="#804040"><strong>></strong></font><font color="#a020f0">$tmpFile</font><br><br><br><font color="#0000ff"># add jar library to CLASSPATH</font><br><font color="#008080">I</font>=<font color="#ff00ff">0</font><br><font color="#804040"><strong>while</strong></font><font color="#804040"><strong> </strong></font><font color="#804040"><strong>read</strong></font><font color="#804040"><strong> line </strong></font><br><font color="#804040"><strong>do</strong></font> <br>        <font color="#008080">I</font>=<font color="#6a5acd">`expr </font><font color="#a020f0">$I</font><font color="#6a5acd"> + </font><font color="#ff00ff">1</font><font color="#6a5acd"> `</font><br>        <font color="#804040"><strong>if</strong></font> <font color="#804040"><strong>[</strong></font> <font color="#a020f0">$I</font> <font color="#804040"><strong>-eq</strong></font> <font color="#ff00ff">1</font> <font color="#804040"><strong>]</strong></font><br>        <font color="#804040"><strong>then</strong></font><br>                <font color="#008080">CLASSPATH</font>=<font color="#804040"><strong>"</strong></font><font color="#a020f0">${</font><font color="#a020f0">line</font><font color="#a020f0">}</font><font color="#804040"><strong>"</strong></font><br>        <font color="#804040"><strong>else</strong></font><br>                <font color="#008080">CLASSPATH</font>=<font color="#804040"><strong>"</strong></font><font color="#a020f0">${</font><font color="#a020f0">CLASSPATH</font><font color="#a020f0">}</font><font color="#ff00ff">:</font><font color="#a020f0">${</font><font color="#a020f0">line</font><font color="#a020f0">}</font><font color="#804040"><strong>"</strong></font><br>        <font color="#804040"><strong>fi</strong></font><br><font color="#804040"><strong>done</strong></font><font color="#804040"><strong><</strong></font> <font color="#a020f0">$tmpFile</font><br><br>rm <font color="#a020f0">$tmpFile</font><br><br><br><font color="#0000ff"># run program</font><br><font color="#804040"><strong>if</strong></font> <font color="#804040"><strong>[</strong></font> <font color="#804040"><strong>"</strong></font><font color="#ff00ff">-</font><font color="#a020f0">$1</font><font color="#804040"><strong>"</strong></font> <font color="#804040"><strong>!=</strong></font> <font color="#804040"><strong>"</strong></font><font color="#ff00ff">-</font><font color="#804040"><strong>"</strong></font> <font color="#804040"><strong>]</strong></font><font color="#804040"><strong>;</strong></font> <font color="#804040"><strong>then</strong></font>   <font color="#0000ff"># if parameter 1 is not null</font><br>  <font color="#804040"><strong>echo</strong></font><font color="#ff00ff"> </font><font color="#804040"><strong>"</strong></font><font color="#ff00ff">java -cp .:</font><font color="#a020f0">${</font><font color="#a020f0">CLASSPATH</font><font color="#a020f0">}</font><font color="#ff00ff">  com.khan.AppMain.UpdateCell2CBC </font><font color="#a020f0">$1</font><font color="#ff00ff"> > updatecell2cbc.log</font><font color="#804040"><strong>"</strong></font><br><font color="#0000ff">#  java -cp .:${CLASSPATH} com.khan.AppMain.UpdateCell2CBC $1> updatecell2cbc.log</font><br><font color="#804040"><strong>else</strong></font><br>    <font color="#804040"><strong>echo</strong></font><font color="#ff00ff"> </font><font color="#804040"><strong>"</strong></font><font color="#ff00ff">  usage: </font><font color="#a020f0">$0</font><font color="#ff00ff">  CellListFile</font><font color="#804040"><strong>"</strong></font><br><font color="#804040"><strong>fi</strong></font><br><br><br></font><img src ="http://www.shnenglu.com/Khan/aggbug/49008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Khan/" target="_blank">Khan's Notebook</a> 2008-05-06 15:26 <a href="http://www.shnenglu.com/Khan/archive/2008/05/06/49008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过两个点的l纬度计距?/title><link>http://www.shnenglu.com/Khan/archive/2008/02/28/43390.html</link><dc:creator>Khan's Notebook</dc:creator><author>Khan's Notebook</author><pubDate>Thu, 28 Feb 2008 07:18:00 GMT</pubDate><guid>http://www.shnenglu.com/Khan/archive/2008/02/28/43390.html</guid><wfw:comment>http://www.shnenglu.com/Khan/comments/43390.html</wfw:comment><comments>http://www.shnenglu.com/Khan/archive/2008/02/28/43390.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Khan/comments/commentRss/43390.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Khan/services/trackbacks/43390.html</trackback:ping><description><![CDATA[最q开始做一个类似gis的东? 需要求一些经U度相关的?.<br><br>看了<a target="_blank">通过两个点的l纬度计距?/a>q篇Q据说是Google里扒来的法Q于是决定验证一下?br>通过计算发现非常正确?br>?0,120?1,121两个坐标点进行验证,同Mapinfo中计的l果非常的相q?br>后来又把坐标pȝ接当成直角坐标系来计,发现误差很大?br>于是仍然用直角坐标系Ҏ(gu)来计,l纬度加上了?.86的参敎ͼq样计算下来和结果相q?br><br><br><br><br>c#代码<br>private const double EARTH_RADIUS = 6378.137; //地球半径<br>private static double rad(double d)<br>{<br>   return d * Math.PI / 180.0;<br>} <p>public static double GetDistance(double lat1, double lng1, double lat2, double lng2)<br>{<br>   double radLat1 = rad(lat1);<br>   double radLat2 = rad(lat2);<br>   double a = radLat1 - radLat2;<br>   double b = rad(lng1) - rad(lng2);<br>   double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) + <br>    Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));<br>   s = s * EARTH_RADIUS;<br>   s = Math.Round(s * 10000) / 10000;<br>   return s;<br>}</p> <br> <p>vb代码</p> <img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Const EARTH_RADIUS = 6378.137<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Const Pi = 3.1415926535898<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Function rad(ByVal d As Double) As Double<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">rad = d * Pi / 180<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">End Function<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Function GetDistance(lat1 As Double, lng1 As Double, lat2 As Double, lng2 As Double) As Double<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Dim radlat1 As Double, radlat2 As Double<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Dim a As Double, b As Double, s As Double, Temp As Double<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">radlat1 = rad(lat1)<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">radlat2 = rad(lat2)<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">a = radlat1 - radlat2<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">b = rad(lng1) - rad(lng2)<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Temp = Sqr(Sin(a / 2) ^ 2 + Cos(radlat1) * Cos(radlat2) * Sin(b / 2) ^ 2)<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">s = 2 * Atn(Temp / Sqr(-Temp * Temp + 1))     '没有反正弦函敎ͼ|上找了?br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">s = s * EARTH_RADIUS<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">GetDistance = s<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">End Function<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Private Sub Command1_Click()<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Text5.Text = Str(GetDistance(Val(Text1.Text), Val(Text2.Text), Val(Text3.Text), Val(Text4.Text)))<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">End Sub<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Private Sub Command2_Click()<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Text5.Text = Str((Sqr((Val(Text3.Text) - Val(Text1.Text)) ^ 2 + (Val(Text4.Text) - Val(Text2.Text)) ^ 2)) * 111.3199338)<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">End Sub<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Private Sub Command3_Click()<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">Text5.Text = Str((Sqr((Val(Text3.Text) * 0.86 - Val(Text1.Text) * 0.86) ^ 2 + (Val(Text4.Text) - Val(Text2.Text)) ^ 2)) * 111.3199338)<br><img src="http://tangf.cnblogs.com/Images/OutliningIndicators/None.gif" align="top">End Sub <p><br></p> <p><br></p> 同纬度计比较简?br> <p>AQ?0Q?0Q,BQ?0Q?0Q两点之_(d)此段代码和我用余弦定理算出来的结果很一致? <br>余u定理的步骤是Q?、算A、B弦长Q地球半径R*cosQ经度差60Q?R/2Q? <br>2、算角AOB,O为地球圆心,利用余u定理Q? <br>cosAOB=(2R*R-(R/2)^2) /2*R*R=7/8; <br>3、弧AB的长为:(x)R*arc cos(7/8);求毕 <br></p> <br> <p><br></p> <p>原理:<br></p> <p> 地球赤道上环l地球一周走一圈共40075.04公里,而@一圈分?60°,而每1°(??0,每一度一U在赤道上的长度计算如下Q? <br> <br>  40075.04km/360°=111.31955km <br> <br>  111.31955km/60=1.8553258km=1855.3m <br> <br>  而每一分又?0U?每一U就代表1855.3m/60=30.92m <br> <br>  L两点距离计算公式? <br> <br>  dQ?11.12cos{1/[sinΦAsinΦB十cosΦAcosΦBcos(λB?#955;A)]} <br> <br>  其中A点经度,U度分别?#955;A?#934;AQB点的l度、纬度分别ؓ(f)λB?#934;BQdR?/p> <br> <img src ="http://www.shnenglu.com/Khan/aggbug/43390.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Khan/" target="_blank">Khan's Notebook</a> 2008-02-28 15:18 <a href="http://www.shnenglu.com/Khan/archive/2008/02/28/43390.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbuilder 2006 错误信息 java/lang/ClassFormatError: Bad version information http://www.shnenglu.com/Khan/archive/2007/10/22/34838.htmlKhan's NotebookKhan's NotebookMon, 22 Oct 2007 04:03:00 GMThttp://www.shnenglu.com/Khan/archive/2007/10/22/34838.htmlhttp://www.shnenglu.com/Khan/comments/34838.htmlhttp://www.shnenglu.com/Khan/archive/2007/10/22/34838.html#Feedback1http://www.shnenglu.com/Khan/comments/commentRss/34838.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/34838.htmljava/lang/ClassFormatError: Bad version information



project -> project properties->build->java ?br>把默认的 target VM : java 2 sdk , v5.0 and later
改ؓ(f) All java sdks
然后rebuild?..
ok 啦!





Khan's Notebook 2007-10-22 12:03 发表评论
]]>
(转蝲自IBM-DEV)javaq用异步输入输出编写Socketq程通信http://www.shnenglu.com/Khan/archive/2007/03/29/20878.htmlKhan's NotebookKhan's NotebookThu, 29 Mar 2007 07:31:00 GMThttp://www.shnenglu.com/Khan/archive/2007/03/29/20878.htmlhttp://www.shnenglu.com/Khan/comments/20878.htmlhttp://www.shnenglu.com/Khan/archive/2007/03/29/20878.html#Feedback0http://www.shnenglu.com/Khan/comments/commentRss/20878.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/20878.html阅读全文

Khan's Notebook 2007-03-29 15:31 发表评论
]]>
最q的开发项?java)http://www.shnenglu.com/Khan/archive/2006/11/03/14618.htmlKhan's NotebookKhan's NotebookFri, 03 Nov 2006 05:49:00 GMThttp://www.shnenglu.com/Khan/archive/2006/11/03/14618.htmlhttp://www.shnenglu.com/Khan/comments/14618.htmlhttp://www.shnenglu.com/Khan/archive/2006/11/03/14618.html#Feedback1http://www.shnenglu.com/Khan/comments/commentRss/14618.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/14618.htmlcmpp2_gateway

自己下蝲玩的

Khan's Notebook 2006-11-03 13:49 发表评论
]]>
java执行外部指o(h),q接收中文结?/title><link>http://www.shnenglu.com/Khan/archive/2006/09/28/13079.html</link><dc:creator>Khan's Notebook</dc:creator><author>Khan's Notebook</author><pubDate>Thu, 28 Sep 2006 02:07:00 GMT</pubDate><guid>http://www.shnenglu.com/Khan/archive/2006/09/28/13079.html</guid><wfw:comment>http://www.shnenglu.com/Khan/comments/13079.html</wfw:comment><comments>http://www.shnenglu.com/Khan/archive/2006/09/28/13079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Khan/comments/commentRss/13079.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Khan/services/trackbacks/13079.html</trackback:ping><description><![CDATA[package com.khan.util;<br /><br /><br />import java.io.BufferedInputStream;<br />import java.io.IOException;<br />import java.io.InputStream;<br />//import java.io.File;<br /><br />/**<br /> * <p>Title: </p><br /> * <p>Description: </p><br /> * <p>Copyright: Copyright (c) 2006</p><br /> * <p>Company: </p><br /> * @author not attributable<br /> * @version 1.0<br /> */<br /><br /><br />public class ExecCmd {<br /><br />    public ExecCmd() {<br /><br />    }<br /><br /><br />    // read an input-stream into a String<br />    public static String loadStream(InputStream in, String charset) throws IOException {<br />        int char_set_len = 2;<br />        if (null == charset) {<br />            charset = "GBK";<br />        }<br /><br />        if (charset.equals("utf8") || charset.equals("UTF8")<br />            || charset.equals("utf-8") || charset.equals("UTF-8")) {<br />            char_set_len = 3;<br />        }<br /><br />        int ptr = 0;<br />        byte[] char_buff = new byte[char_set_len];<br />        in = new BufferedInputStream(in);<br /><br />        StringBuffer buffer = new StringBuffer();<br />        while ((ptr = in.read()) != -1) {<br /><br />            if (ptr >= 0x80) { //中文处理<br />                char_buff[0] = (byte) ptr;<br />                for (int i = 1; i < char_set_len; i++) {<br />                    char_buff[i] = (byte) in.read();<br />                    if (char_buff[i] == -1) {<br />                        break;<br />                    }<br />                }<br />                buffer.append(new String(char_buff, charset));<br />                continue;<br />            }<br /><br />            buffer.append((char) ptr);<br />        }<br />        return buffer.toString();<br />    }<br /><br /><br />    static public void main(String[] args) {<br />        long l = 0;<br />        String str = "";<br />        String[] cmd1 = {"cmd.exe",<br />                        "/c",<br />                        "dir",<br />                        "/b",<br />                        "/s",   "e:\\*.log"};<br />                        //args[0] +"\\*.log"};<br /><br />        String[] cmd = {"gawk",<br />                       "-F,",<br />                       //"\"END{print NR}\"",<br />                       "\"END{print substr($1, 0, 8), NR}\"",<br />                       "mo_pay.log"};<br />        //File dir = new File("D:\\Program Files\\gawk\\bin");<br /><br />        try {<br />            Process ps = Runtime.getRuntime().exec(cmd1);<br />            String[] strs = loadStream(ps.getInputStream(), "GBK").split("\r\n");<br />            System.err.print(loadStream(ps.getErrorStream(), "GBK"));<br />            for (int i = 0; i < strs.length; i++) {<br />                cmd[3] = strs[i].trim();<br />                ps = Runtime.getRuntime().exec(cmd);<br />                str = loadStream(ps.getInputStream(), "GBK");<br />                str = str.substring(0, str.indexOf('\r'));<br /><br />                l += Long.parseLong(str.split(" ")[1]);<br />                System.out.println(str);<br />                System.err.print(loadStream(ps.getErrorStream(), "GBK"));<br />            }<br />            System.out.println(l);<br />        } catch (IOException e) {<br />            e.printStackTrace();<br />        }<br />        //System.out.println("执行完毕");<br />    }<br /><br />}<br /><br /><br /><br />  q个代码是我最q的一个project?用来调用gawk的处理结?q在web上显C?br />在web中显C的部分是jsp?q个没有必要脓(chung)?<br />  awk处理文本的效率确实不?<br /><img src ="http://www.shnenglu.com/Khan/aggbug/13079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Khan/" target="_blank">Khan's Notebook</a> 2006-09-28 10:07 <a href="http://www.shnenglu.com/Khan/archive/2006/09/28/13079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 上传文g代码Q支持中文文件名和中文文件内容,可以同时提交多个参数http://www.shnenglu.com/Khan/archive/2006/08/11/11132.htmlKhan's NotebookKhan's NotebookFri, 11 Aug 2006 07:49:00 GMThttp://www.shnenglu.com/Khan/archive/2006/08/11/11132.htmlhttp://www.shnenglu.com/Khan/comments/11132.htmlhttp://www.shnenglu.com/Khan/archive/2006/08/11/11132.html#Feedback3http://www.shnenglu.com/Khan/comments/commentRss/11132.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/11132.html阅读全文

Khan's Notebook 2006-08-11 15:49 发表评论
]]>
Java 的简单数据库q接池实?/title><link>http://www.shnenglu.com/Khan/archive/2006/03/05/3755.html</link><dc:creator>Khan's Notebook</dc:creator><author>Khan's Notebook</author><pubDate>Sun, 05 Mar 2006 09:36:00 GMT</pubDate><guid>http://www.shnenglu.com/Khan/archive/2006/03/05/3755.html</guid><wfw:comment>http://www.shnenglu.com/Khan/comments/3755.html</wfw:comment><comments>http://www.shnenglu.com/Khan/archive/2006/03/05/3755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Khan/comments/commentRss/3755.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Khan/services/trackbacks/3755.html</trackback:ping><description><![CDATA[     摘要: 一个连接容器,记录q接和连接用状?package db.khan;import java.sql.*;/**//*数据库连接容?nbsp;* */public class DBPoolCon {  /**//*容器中的q接*/  public Connection con...  <a href='http://www.shnenglu.com/Khan/archive/2006/03/05/3755.html'>阅读全文</a><img src ="http://www.shnenglu.com/Khan/aggbug/3755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Khan/" target="_blank">Khan's Notebook</a> 2006-03-05 17:36 <a href="http://www.shnenglu.com/Khan/archive/2006/03/05/3755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搞定了Jms的ObjectMessage对象传?Q这个项目可以告一D落?/title><link>http://www.shnenglu.com/Khan/archive/2006/02/13/3236.html</link><dc:creator>Khan's Notebook</dc:creator><author>Khan's Notebook</author><pubDate>Mon, 13 Feb 2006 09:41:00 GMT</pubDate><guid>http://www.shnenglu.com/Khan/archive/2006/02/13/3236.html</guid><wfw:comment>http://www.shnenglu.com/Khan/comments/3236.html</wfw:comment><comments>http://www.shnenglu.com/Khan/archive/2006/02/13/3236.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/Khan/comments/commentRss/3236.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Khan/services/trackbacks/3236.html</trackback:ping><description><![CDATA[     摘要: 关键?JAVA JMS  Active MQ  XML INI Eclipse Resinjms服务?, active MQ 我这一应该是W一比较详l的用代?注释介绍的中文文了activeMQ是一个开源的C核心的jms服务?在国外的应用相当q泛.所以这个项目我攑ּ了jboss4的用数据库作为消息蝲体的jms服务,改用active MQ  &nb...  <a href='http://www.shnenglu.com/Khan/archive/2006/02/13/3236.html'>阅读全文</a><img src ="http://www.shnenglu.com/Khan/aggbug/3236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Khan/" target="_blank">Khan's Notebook</a> 2006-02-13 17:41 <a href="http://www.shnenglu.com/Khan/archive/2006/02/13/3236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>消息中间件和JMS(转蝲自jfox project)http://www.shnenglu.com/Khan/archive/2006/02/07/3100.htmlKhan's NotebookKhan's NotebookTue, 07 Feb 2006 02:42:00 GMThttp://www.shnenglu.com/Khan/archive/2006/02/07/3100.htmlhttp://www.shnenglu.com/Khan/comments/3100.htmlhttp://www.shnenglu.com/Khan/archive/2006/02/07/3100.html#Feedback1http://www.shnenglu.com/Khan/comments/commentRss/3100.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/3100.html (from http://jmsmom.3322.net/mom_jms/jms.html)

当前QCORBA、DCOM、RMI{RPC中间件技术已q泛应用于各个领域。但是面对规模和复杂度都来高的分布式pȝQ这些技术也昄出其局限性:(x) Q?Q同步通信Q客户发用后Q必ȝ待服务对象完成处理ƈq回l果后才能l执行;Q?Q客户和服务对象的生命周期紧密耦合Q客戯E和服务对象q程 都必L常运行;如果׃服务对象崩溃或者网l故障导致客L(fng)h不可达,客户?x)接收到异常Q(3Q点对点通信Q客L(fng)一ơ调用只发送给某个单独的目标对 象?
   面向消息的中间gQMessage Oriented MiddlewareQMOMQ较好的解决了以上问题。发送者将消息发送给消息服务器,消息服务器将消息存放在若q队列中Q在合适的时候再消息{发给? 收者。这U模式下Q发送和接收是异步的Q发送者无需{待Q二者的生命周期未必相同Q发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行; 一对多通信Q对于一个消息可以有多个接收者?
   已有的MOMpȝ包括IBM的MQSeries、Microsoft的MSMQ和BEA的MessageQ{。由于没有一个通用的标准,q些pȝ很难实现 互操作和无缝q接。Java Message ServiceQJMSQ是SUN提出的旨在统一各种MOMpȝ接口的规范,它包含点对点QPoint to PointQPTPQ和发布/订阅QPublish/SubscribeQpub/subQ两U消息模型,提供可靠消息传输、事务和消息qo(h){机制?


1.JMS
   JAVA 消息服务(JMS)定义了Java 中访问消息中间g的接口。JMS 只是接口Qƈ没有l予实现Q实现JMS 接口的消息中间gUCؓ(f)JMS ProviderQiLink实现了JMS接口Q用户可以通过使用JMS接口Q在iLink中进行JMS~程?iLink支持JMS1.0.2版本?

2.JMS接口描述
   JMS 支持两种消息cdPTP 和Pub/SubQ分别称作:(x)PTP Domain 和Pub/Sub DomainQ这两种接口都承统一的JMS父接口,JMS 主要接口如下所C:(x)

MS父接?/font>

PTP

Pub/Sub

ConnectionFactory

QueueConnectionFactory

TopicConnectionFactory

Connection

QueueConnection

TopicConnection

Destination

Queue

Topic

Session

QueueSession

TopicSession

MessageProducer

QueueSender

TopicPublisher

MessageConsumer

QueueReceiver,QueueBrowser

TopicSubscriber

 

 

 

                    
   ConnectionFactory Q连接工厂,JMS 用它创徏q接
   Connection QJMS 客户端到JMS Provider 的连?br>    Destination Q消息的目的?br>   SessionQ?一个发送或接收消息的线E?br>   MessageProducerQ?由Session 对象创徏的用来发送消息的对象
   MessageConsumerQ?由Session 对象创徏的用来接收消息的对象

3.JMS消息模型
JMS 消息׃下几部分l成Q消息头Q属性,消息体?br>  
3.1 消息?Header) - 消息头包含消息的识别信息和\׃息,消息头包含一些标准的属性如QJMSDestination,JMSMessageID {?

 消息?/font>

 p讄

JMSDestination

send ?publish Ҏ(gu)

JMSDeliveryMode

send ?publish Ҏ(gu)

JMSExpiration

send ?publish Ҏ(gu)

JMSPriority

send ?publish Ҏ(gu)

JMSMessageID

send ?publish Ҏ(gu)

JMSTimestamp

send ?publish Ҏ(gu)

JMSCorrelationID

客户

JMSReplyTo

客户

JMSType

客户

JMSRedelivered

JMS Provider

 

 

      
 

 

 

      
3.2 属?Properties) - 除了消息头中定义好的标准属性外QJMS 提供一U机制增加新属性到消息头中Q这U新属性包含以下几U:(x)
   1. 应用需要用到的属?
   2. 消息头中原有的一些可选属?
   3. JMS Provider 需要用到的属性?br>   标准的JMS 消息头包含以下属性:(x)

JMSDestination

消息发送的目的?/font>

JMSDeliveryMode

传递模式, 有两U模式:(x) PERSISTENT 和NON_PERSISTENTQPERSISTENT 表示该消息一定要被送到目的圎ͼ否则?x)导致应用错误。NON_PERSISTENT 表示偶然丢失该消息是被允许的Q这两种模式使开发者可以在消息传递的可靠性和吞吐量之间找到^衡点?/font>

JMSMessageID

唯一识别每个消息的标识,由JMS Provider 产生?/font>

JMSTimestamp

一个消息被提交lJMS Provider 到消息被发出的时间?/font>

JMSCorrelationID

用来q接到另外一个消息,典型的应用是在回复消息中q接到原消息?/font>

JMSReplyTo

提供本消息回复消息的目的地址

JMSRedelivered

如果一个客L(fng)收到一个设|了JMSRedelivered 属性的消息Q则表示可能该客L(fng)曄在早些时候收到过该消息,但ƈ没有{收(acknowledged)?/font>

JMSType

消息cd的识别符?/font>

JMSExpiration

? 息过期时_(d){于QueueSender 的send Ҏ(gu)中的timeToLive 值或TopicPublisher 的publish Ҏ(gu)中的timeToLive 值加上发送时ȝGMT 旉倹{如果timeToLive值等于零Q则JMSExpiration 被设为零Q表C消息怸q期。如果发送后Q在消息q期旉之后消息q没有被发送到目的圎ͼ则该消息被清除?/font>

JMSPriority

消息优先U,?-9 十个U别Q?-4 是普通消息,5-9 是加急消息。JMS 不要求JMS Provider 严格按照q十个优先发送消息,但必M证加急消息要先于普通消息到达?/font>

 

 

 

 

 

 

 

 


3.3 消息?Body) - JMS API 定义?U消息体格式Q也叫消息类型,你可以用不同Ş式发送接收数据ƈ可以兼容现有的消息格式,下面描述q?U类型:(x)

消息cd

消息?/font>

TextMessage

java.lang.String对象Q如xml文g内容

MapMessage

?值对的集合,名是String对象Q值类型可以是JavaM基本cd

BytesMessage

字节?/font>

StreamMessage

Java中的输入输出?/font>

ObjectMessage

Java中的可序列化对象

Message

没有消息体,只有消息头和属?/font>











下例演示创徏q发送一个TextMessageC个队列:(x)
TextMessage message = queueSession.createTextMessage();
message.setText(msg_text); // msg_text is a String
queueSender.send(message);

下例演示接收消息q{换ؓ(f)合适的消息cdQ?
Message m = queueReceiver.receive();
if (m instanceof TextMessage) {
 TextMessage message = (TextMessage) m;
 System.out.println("Reading message: " + message.getText());
} else {
 // Handle error
}

4. 消息的同步异步接?br>    消息的同步接收是指客L(fng)dL收消息,JMS 客户端可以采用MessageConsumer 的receiveҎ(gu)L收下一个消息?br>   消息的异步接收是指当消息到达Ӟd通知客户端。JMS 客户端可以通过注册一个实 现MessageListener 接口的对象到MessageConsumerQ这P每当消息到达ӞJMS Provider ?x)调用MessageListener中的onMessage Ҏ(gu)?


5. PTP模型
PTP(Point-to-Point)模型是基于队列的Q发送方发消息到队列Q接收方从队列接收消息,队列的存在得消息的异步传输成ؓ(f)可能。和邮gpȝ中的邮箱一P队列可以包含各种消息QJMS Provider 提供工具理队列的创建、删除。JMS PTP 模型定义了客L(fng)如何向队列发送消息,从队列接收消息,览队列中的消息?br>   下面描述JMS PTP 模型中的主要概念和对象:(x)

名称

描述

Queue

由JMS Provider 理Q队列由队列名识别,客户端可以通过JNDI 接口用队列名得到一个队列对象?/font>

TemporaryQueue

由QueueConnection 创徏Q而且只能由创建它的QueueConnection 使用?/font>

QueueConnectionFactory

客户端用QueueConnectionFactory 创徏QueueConnection 对象?/font>

QueueConnection

一个到JMS PTP provider 的连接,客户端可以用QueueConnection 创徏QueueSession 来发送和接收消息?/font>

QueueSession

提供一些方法创建QueueReceiver 、QueueSender、QueueBrowser 和TemporaryQueue。如果在QueueSession 关闭Ӟ有一些消息已l被收到Q但q没有被{收(acknowledged)Q那么,当接收者下ơ连接到相同的队列时Q这些消息还?x)被再次接收?/font>

QueueReceiver

客户端用QueueReceiver 接收队列中的消息Q如果用户在QueueReceiver 中设定了消息选择条gQ那么不W合条g的消息会(x)留在队列中,不会(x)被接收到?/font>

QueueSender

客户端用QueueSender 发送消息到队列?/font>

QueueBrowser

客户端可以QueueBrowser 览队列中的消息Q但不会(x)收走消息?/font>

QueueRequestor

JMS 提供QueueRequestor cȝ化消息的收发q程。QueueRequestor 的构造函数有两个参数QQueueSession 和queueQQueueRequestor 通过创徏一个(f)旉列来完成最l的收发消息h?/font>

可靠?Reliability)

队列可以长久C存消息直到接收者收到消息。接收者不需要因为担心消息会(x)丢失而时d队列保持Ȁzȝq接状态,充分体现了异步传输模式的优势?/font>



        
      
  
 

 

 

 

 

 

 

 

6. PUB/SUB模型
JMS Pub/Sub 模型定义了如何向一个内容节点发布和订阅消息Q这些节点被UC主题(topic)?br>   主题可以被认为是消息的传输中介,发布?publisher)发布消息C题,订阅?subscribe) 从主题订阅消息。主题得消息订阅者和消息发布者保持互相独立,不需要接触即可保证消息的传送?br>   下面描述JMS Pub/Sub 模型中的主要概念和对象:(x)

名称

描述

订阅(subscription)

? 息订阅分为非持久订阅(non-durable subscription)和持久订?durable subscrip-tion)Q非持久订阅只有当客L(fng)处于Ȁzȝ态,也就是和JMS Provider 保持q接状态才能收到发送到某个主题的消息,而当客户端处于离U状态,q个旉D发C题的消息会(x)丢失Q永q不?x)收到。持久订阅时Q客L(fng)向JMS 注册一个识别自pn份的IDQ当q个客户端处于离U时QJMS Provider ?x)?f)q个ID 保存所有发送到主题的消息,当客户再ơ连接到JMS ProviderӞ?x)根据自qID 得到所有当自己处于ȝ时发送到主题的消息?/font>

Topic

主题由JMS Provider 理Q主题由主题名识别,客户端可以通过JNDI 接口用主题名得到一个主题对象。JMS 没有l出主题的组l和层次l构的定义,由JMS Provider 自己定义?/font>

TemporaryTopic

临时主题由TopicConnection 创徏Q而且只能由创建它的TopicConnection 使用。(f)时主题不能提供持久订阅功能?/font>

TopicConnectionFactory

客户端用TopicConnectionFactory 创徏TopicConnection 对象?/font>

TopicConnection

TopicConnection 是一个到JMS Pub/Sub provider 的连接,客户端可以用TopicConnection创徏TopicSession 来发布和订阅消息?/font>

TopicSession

TopicSession 提供一些方法创建TopicPublisher、TopicSubscriber、TemporaryTopic 。它q提供unsubscribe Ҏ(gu)取消消息的持久订阅?/font>

TopicPublisher

客户端用TopicPublisher 发布消息C题?/font>

TopicSubscriber

客户端用TopicSubscriber 接收发布C题上的消息。可以在TopicSubscriber 中设|消息过滤功能,q样Q不W合要求的消息不?x)被接收?/font>

Durable TopicSubscriber

如果一个客L(fng)需要持久订阅消息,可以使用Durable TopicSubscriberQTopSession 提供一个方法createDurableSubscriber创徏Durable TopicSubscriber 对象?/font>

恢复和重新派?Recovery and Redelivery)

非持久订阅状态下Q不能恢复或重新zN一个未{收的消息。只有持久订阅才能恢复或重新zN一个未{收的消息?/font>

TopicRequestor

JMS 提供TopicRequestor cȝ化消息的收发q程。TopicRequestor 的构造函数有两个参数QTopicSession 和topic。TopicRequestor 通过创徏一个(f)时主题来完成最l的发布和接收消息请求?/font>

可靠?Reliability)

当所有的消息必须被接Ӟ则用持久订阅模式。当丢失消息能够被容忍,则用非持久订阅模式?/font>

 

 

 

 

 

 

 

 
 

 

 
 
 
 
 
 
 
 
 
7. 开发JMS的步?br>    q义上说Q一个JMS 应用是几个JMS 客户端交换消息,开发JMS 客户端应用由以下几步构成Q?
用JNDI 得到ConnectionFactory 对象Q?
用JNDI 得到目标队列或主题对象,即Destination 对象Q?
用ConnectionFactory 创徏Connection 对象Q?
用Connection 对象创徏一个或多个JMS SessionQ?
用Session 和Destination 创徏MessageProducer 和MessageConsumerQ?
通知Connection 开始传递消息?



Khan's Notebook 2006-02-07 10:42 发表评论
]]>
JAVA MESSAGE SERVICE的概念与体系l构(转自计算Z界iC֌)http://www.shnenglu.com/Khan/archive/2006/02/07/3099.htmlKhan's NotebookKhan's NotebookTue, 07 Feb 2006 02:37:00 GMThttp://www.shnenglu.com/Khan/archive/2006/02/07/3099.htmlhttp://www.shnenglu.com/Khan/comments/3099.htmlhttp://www.shnenglu.com/Khan/archive/2006/02/07/3099.html#Feedback0http://www.shnenglu.com/Khan/comments/commentRss/3099.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/3099.html 和其他的JAVA API相结合,它甚臛_JDBC API在同一个事务内q作而相安无事,它也可以直接地和Java Transaction API (JTA)、Java Transaction Service API (JTS)一起工作。不要把JMS API当作JavaBeansQ它最初的设计q不是作为JavaBeans部g来设计的Q但是JavaBeans能够使用它的session发送和接收? 息。不要忘了Java Naming and Directory Interface API(JNDI), 没有它我们也无法配置和寻找JMS对象?br>   JMS的应用有以下几个部分l合而成Q?br> 一?nbsp;   JMS Clients: 它们是java 语言E序用来发送和接收信息的?br> 二?nbsp;   Non-JMS Clients: 它们是本地的信息pȝ的API构徏的而不是用JMS API?br> 三?nbsp;   Messages: 每一个应用都要定义一个信息集合用来在客户端进行信息通讯?br> 四?nbsp;   JMS Provider: 实现JMS的一个信息系l,除了理和控制之外,q也是一个完整的信息产品的必ȝ特征?br> 五?nbsp;   Administrated Objects: 由客L(fng)预先配置创徏的JMS对象?br>     JMS的管理方法:(x)
有两个JMS理对象的类型:(x)
一?nbsp;   ConnectionFactory:  客户端用q个对象创徏q接?br> 二?nbsp;   Destination: 客户端指定的接收或发送的一个信息源?br> 理者将Administrated Objects攑֜一个叫JNDI namespace的地斏V?br> JMS两种信息风格Q?br> 一?nbsp;   POINT-TO-POINT(PTP)
二?nbsp;   PUBLISH-AND-SUBSCRIBE(PUB/SUB)
JMS的接口:(x)
  Ҏ(gu)采用的信息风格其接口对象也是不同的:(x)
公用对象Q?br>   ConnectionFactory、Connection、Destination、Session、MessagerPoducer、MessageConsumer
PTP专用对象Q?br>   QueueConnectionFactory、QueueConnection、Queue、QueueSession、QueueSender、QueueReceiver or QueueBrowser
PUB/SUB专用对象:
  TopicConnectionFactory、TopicConnection、Topic、TopicSession、TopicPublisher、TopicSubscriber

开发一个JMS客户端的程Q?br> 一?nbsp;   用JNDI扑ֈ一个ConnectionFactory对象?br> 二?nbsp;   用JNDI扑ֈ一个Destination对象?br> 三?nbsp;   用ConnectionFactory对象建立一个JMS Connection对象?br> 四?nbsp;   用JMS Connection对象建立一个或多个JMS Session对象?br> 五?nbsp;   用一个Session和Destination建立一个MessageProducer和MessageConsumer对象?br> 六?nbsp;   用Connection对象开始信息递交?br> JMS的多U程Q?br>      JMS对象中有一部分是被自动׃n的,因此JMS限制那些被自动共享的对象使之不能够被一个多U程的程序所存取Q下面列Z哪些对象能够被共享:(x)
       自动׃n的对象:(x)
一?nbsp;   Destination
二?nbsp;   ConnectionFactory
三?nbsp;   Connection
       不被׃n的对象:(x)
一?nbsp;   Session
二?nbsp;   MessageProducer
三?nbsp;   MessageConsumer
        JMS消息的格式:(x)
        JMS提供了系列的API来完成信息的格式Q我们必M格按照这些格式来传递信息?br> 一?nbsp;   信息?br>        JMSDestination,JMSDeliveryMode,JMSExpiration,JMSPriority,
        JMSMessageID,JMSTimestamp,JMSCorrelationID,JMSReplyTo,
        JMSType,JMSRedelivered
二?nbsp;   信息属?br>        JMSXUserID,JMSAppID,JMSXDeliveryCount, JMSXGroupID,
        JMSXGroupSeq,JMSXProducerTXID,JMSXConsumerTXID,
        JMSXRcvTimestamp,JMSXState
三?nbsp;   信息?提供了五U信息体Q每一U信息体有自׃用的接口)
        StreamMessage,MapMessage,TextMessage,ObjectMessage,BytesMessage


Khan's Notebook 2006-02-07 10:37 发表评论
]]>
扫雷游戏的设?Kjava 原创)http://www.shnenglu.com/Khan/archive/2006/02/05/3077.htmlKhan's NotebookKhan's NotebookSun, 05 Feb 2006 13:44:00 GMThttp://www.shnenglu.com/Khan/archive/2006/02/05/3077.htmlhttp://www.shnenglu.com/Khan/comments/3077.htmlhttp://www.shnenglu.com/Khan/archive/2006/02/05/3077.html#Feedback3http://www.shnenglu.com/Khan/comments/commentRss/3077.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/3077.html阅读全文

Khan's Notebook 2006-02-05 21:44 发表评论
]]>
跨^台图形化c++开发环境的搭徏http://www.shnenglu.com/Khan/archive/2006/02/05/3070.htmlKhan's NotebookKhan's NotebookSun, 05 Feb 2006 10:14:00 GMThttp://www.shnenglu.com/Khan/archive/2006/02/05/3070.htmlhttp://www.shnenglu.com/Khan/comments/3070.htmlhttp://www.shnenglu.com/Khan/archive/2006/02/05/3070.html#Feedback11http://www.shnenglu.com/Khan/comments/commentRss/3070.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/3070.html~译?mingw 5.0.0 (windows下的配置Z)
       选装Gcc,MakeQ和c/c++相关的都装上Q?br>       GDB 调试?br>http://www.mingw.org/download.shtml

ide  eclipse 3.1.2   +  cdt 3.0.1  (eclipse是基于java?需要配|java环境)
http://www.eclipse.org/downloads/
http://java.sun.com


formatter AStyle  c/c++ java c# 代码格式化工?
http://sourceforge.net/projects/astyle/


一.安装mingw
 1. 到指定目录,我的安装路径?D:\Develop\MinGW
 2. 配置pȝ环境变量
     MINGW_HOME = D:\Develop\MinGW
     class_path = .;%MINGW_HOME%\lib
     path = .;%MINGW_HOME%\bin
    当系l中有多个c++开发包的时?写在前面的\径优?br>    mingw中的makeE序名ؓ(f) mingw32-make.exe ,推荐其改名为make

?安装 eclipse 3.12
 1.安装jdk+jre (我机器上是j2sdk 1.5  路径?D:\Develop\J2SDK )
 2.配置javapȝ环境变量
     JAVA_HOME = D:\Develop\J2SDK
     class_path = .;%JAVA_HOME%\lib
     path = .;%JAVA_HOME%\bin
 3.下蝲Eclipse 解压到指定目?直接可以执?如果java环境配置没有问题的话
 4.安装cdt (c/c++ develop kit)
   我按照网上的Ҏ(gu)安装数次都不?(org.eclipse.cdt-3.x.x-win32.x86.zip ?org.eclipse.cdt.sdk-3.0.1-win32.x86.zip 中的文gcopy到eclipse安装目录的对应目录中)
   最后用eclipse自动升的办?打开eclipse help-->software updates-->find an install
   选中search for new features to install , 点next, new remote site ,
    name = cdt 3.01
    url = http://download.eclipse.org/tools/cdt/releases/eclipse3.1 
然后选择 finish ,选中所有文?开始下?下蝲完成后会(x)自动提示安装, 安装完成?apply change ,然后重启eclipse
可以在eclipse下进行c/c++ 开发了

   q有一个问题需要注?cdt的一个问?在对c++文g建立indexer时会(x)?5%的时候卡?而且cpu占用率通常都是100% ,我知道的唯一的解军_法是indexer功能关闭 windows-->perferences--> c/c++-->indexer 选择No Indexer

?安装astyle
   ׃eclipse本n没有针对c/c++的代码格式化工具,所以我们需要借助W三方的工具,我选用astyle一个小巧的,opensource的代码格式化工具,安装非常?解压到指定目录下,只有一个可执行文g,astyle.exe ,其他的都是source doc, 可以直接在命令行下?语法参阅相关文
   我将其整合到了gvim , editplus ,eclipse?. eclipse-->external tools-->program  选择new 新徏
    name = Formatter C++
    localtion = D:\Develop\AStyle1.15\astyle.exe
    working directory = ${workspace_loc:/${project_name}}
    arguments = --style=kr --mode=c++ --indent=spaces=2 ${resource_name}
   定ok?
   使用的时?直接选择 Formatter C++ ok?q里的设|表C?代码风格为k&r, 语法c++ ,代码~进2I格

?试代码
  新徏一个managed c++ project
  新徏一个c++ 文g helloWorld.cpp

/*helloWorld.cpp*/
#include <iostream>

using namespace std;

int main() {
  char str[100] = "hello world!!";
  cout << str << endl;
}


  新徏makefile
# Project: helloWorld


CPP  = g++
CC   = gcc
LIBS =
INCS =
CXXINCS =
CXXFLAGS = -o -Wall -g $(CXXINCS) $(LIBS)
CFLAGS = -o -Wall -g


.c.o: $(CC) $(CFLAGS)  $<

.cpp.o: $(CPP) $(CXXFLAGS) $<

all: helloWorld

helloWorld: helloWorld.o
    $(CPP) -o helloWorld helloWorld.o $(CXXINCS) $(LIBS)

helloWorld.o: helloWorld.cpp


clean:
    del *.exe *.orig *.o
 



Khan's Notebook 2006-02-05 18:14 发表评论
]]>
[导入]操,个死人微软逼我打了sqlserver 的sp3补丁http://www.shnenglu.com/Khan/archive/2006/01/12/2622.htmlKhan's NotebookKhan's NotebookThu, 12 Jan 2006 01:56:00 GMThttp://www.shnenglu.com/Khan/archive/2006/01/12/2622.htmlhttp://www.shnenglu.com/Khan/comments/2622.htmlhttp://www.shnenglu.com/Khan/archive/2006/01/12/2622.html#Feedback2http://www.shnenglu.com/Khan/comments/commentRss/2622.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/2622.html

    本来调试好的jsp脚本Q突然就讉K不了数据库了Q郁闷了半个下午Q结果是windows 2003自作d的封掉了sqlserver 2000可能存在漏洞的端口,D我访问数据库的时候出?Error establishing socket

    所以提醒大Ӟ有这U错误的时候,查sql server sp3补丁



Khan's Notebook 2006-01-12 09:56 发表评论
]]>
[导入]resin2.1.4+iis 配置Ҏ(gu)http://www.shnenglu.com/Khan/archive/2006/01/12/2631.htmlKhan's NotebookKhan's NotebookThu, 12 Jan 2006 01:56:00 GMThttp://www.shnenglu.com/Khan/archive/2006/01/12/2631.htmlhttp://www.shnenglu.com/Khan/comments/2631.htmlhttp://www.shnenglu.com/Khan/archive/2006/01/12/2631.html#Feedback0http://www.shnenglu.com/Khan/comments/commentRss/2631.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/2631.htmlresin2.1.4+iis 配置Ҏ(gu)

W一步,安装jdk1.2.2

执行 jdk-1_2_2_008-win.exe Q将jdk1.2.2安装到硬?/font>
-------说明Q把jdk安装?/font>C盘或D盘都可以Q这里假讑֮装在D?/font> d:\jdk

如图中红圈标CZ|:(x)

l过几步之后选择JAVAq行环境的安装位|,直接?/font>“next?/span>安装Q?/span>

jdk安装完毕?/span>重新启动?sh)?/span>

W二步,讄环境变量

右键?/span>我的?sh)?/font>?/span>Q?/font> 属?/font> -> -> 环境变量
?/font>?/span>pȝ变量?/span>处设|如下几个变量:(x)

A. CLASSPATH =d:\jdk\lib\dt.jar;d:\jdk\lib\tools.jar
B.
JAVA_HOME =d:\jdk
C.
?/font> path 的gd d:\jdk\;d:\jdk\bin;

如图Q?/span>

W三步,配置resin

resin目录?/font>D盘根目录Q如图:(x)

执行d:\resin\bin\httpd.exeQ弹Z个窗口,先不要关掉,如果像下图这样就对了Q?/span>

此时h开览器敲?/font>http://127.0.0.1:8080/Q应可看到如下画面:(x)

?/font>D盘徏?/font> d:\inetpub\wwwroot ?/font> d:\inetpub\scripts目录

?/font>internet服务理器中主目录指向?/font>wwwrootQ另Z?/font>script目录Q指向到scriptsQ如果原来就有目录,则不必新建,认其可正常工作可以了

关闭iisQ先xhttpd.exeH口Q另一个窗口将自动x

q行Q?/font>net stop w3svc

D:\resin\libexec\isapi_srun.dll ?/font> D:\Inetpub\scripts 下面

disapi{选器Q?/span>

该筛选器d后,优先Uؓ(f)? 未知 *?/span>Q不要理它,l箋下面的工?/span>

?/font> d:\inetpub\scripts 目录下徏?/font> resin.ini 文gQ内容如下:(x)
CauchoConfigFile d:/resin/conf/resin.conf

修改 d:\resin\conf\resin.confQ?/font>
L?/span><caucho.com>?/span>Q一般是W?/font>20行左叻I在它下面加入?/span><iis priority='high'/>?/span>L?/span><doc-dir>doc</doc-dir>?/span>Q一般是在第67行左叻I把它注释掉:(x)
?/span><!-- <doc-dir>doc</doc-dir> -->?o:p>

其上方?/font>?/span><http-server>?/span>改ؓ(f)
?/span><http-server app-dir='d:\inetpub\wwwroot'>?br>
到第178行左叻I?/font>
<servlet-mapping url-pattern='*.xtp' servlet-name='xtp'/>
<servlet-mapping url-pattern='*.jsp' servlet-name='jsp'/>

换成
<servlet-mapping url-pattern='*.xtp' servlet-name='com.caucho.jsp.XtpServlet'/>
<servlet-mapping url-pattern='*.jsp' servlet-name='com.caucho.jsp.JspServlet'/>

<!--
<servlet-mapping url-pattern='*.xtp' servlet-name='xtp'/>
<servlet-mapping url-pattern='*.jsp' servlet-name='jsp'/>
-->

l色部分删掉也可以,保留原来的是Z和原配置相对?/span>

安装服务Q?/font>
?/font>DosH口中执?/font> d:\resin\bin\httpd -install 后,弹出一个小H口提示服务d成功

此时查看控制面板->理工具->服务Q应该已l有“Resin Web Server?/span>服务了,扑ֈq手工启动它Q只此一ơ,以后׃用手工启动了

删除Resin Web Server服务Ҏ(gu)Q运?/font> d:\resin\bin\httpd -remove

q行Q?/font>net start w3svc

重启?sh)?/span>

在当前站点名UC右键打开属性面?/span>

按下N序设|?/span>

W?/font>7步应选择d:\inetpub\scripts目录下的isapi_srun.dll

然后启动当前站点Q?/span>

再查?/font>isapi{选器Q?/font>jsp{选器的优先应该变ؓ(f)?/span>?/font>?/span>了,如下图。否则重做,直到做对为止

讄默认文档Q?/span>

jspE序Q?/font>
下列暗U色代码写入index.jsp文gq存?/font> d:\inetpub\wwwroot 目录?/span>

<%@ page contentType="text/html;charset=gb2312"%>
<%
int a=1;
int b=4;
%>
<%=(a+b)%>


在浏览器中输入:(x)http://10.20.128.20 如果面上显C?/font>??/span>Q就大功告成了!

如果没有启动resin。将得到下面的错误信息:(x)Can't contact Servlet Runner at localhost:6802

 

启动iis : net start w3svc

停止iis : net stop w3svc

 

安装resin服务 : d:\resin\bin\httpd –install

删除resin服务 : d:\resin\bin\httpd –remove

Khan's Notebook 2006-01-12 09:56 发表评论
]]>
郁闷?jboss瘫了,我公司的所有服务都停了 http://www.shnenglu.com/Khan/archive/2004/10/22/2650.htmlKhan's NotebookKhan's NotebookFri, 22 Oct 2004 14:30:00 GMThttp://www.shnenglu.com/Khan/archive/2004/10/22/2650.htmlhttp://www.shnenglu.com/Khan/comments/2650.htmlhttp://www.shnenglu.com/Khan/archive/2004/10/22/2650.html#Feedback0http://www.shnenglu.com/Khan/comments/commentRss/2650.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/2650.html
10:00 不明白原?启动的时候提Cjava.io.eofException错误,也不明所?br>11:00 我没有看qQ何jboss的资?q是不行?br>12:00 扑ֈ公司以前的技术h?和他讨论,他也不知道原?他推是我新写的什么应用用了q多的数据库链接或者游标而没有释?Djboss不能链接到oracle数据?因ؓ(f)他下午准备论文答?公司其他人员完全没有接触q这?所以还是我一个hL
14:00 开始将备䆾的jboss的配|文件一行行的看,发现jboss好像自己带了一个嵌入式数据?他的消息池应该是存放在一个叫localDB的文件中?我们现在q个文g?00m之大, 江湖谣传jmsq种队列式的东西占用?00m内容应该不算正常,
13:00 data目录备䆾,用一个初始的localdb覆盖掉原来的,然后L了一些不用的jms资源
忍了几分?好像正常启动?然后跟着启动了基于jms的其他服?然后叫测试h员测?正常?img src="http://www.cnblogs.com/Emoticons/hitwall.gif">

事后再分?我前几天写的一个程序每一U放一条消息到jms 池里? 另外一Ҏ(gu)收的已经做好?当时试了部分都没有问题,但是是什么原因会(x)Djboss的jms池有如此巨大的未处理消息?未解

Khan's Notebook 2004-10-22 22:30 发表评论
]]>
servlet & jsp 不同的中文处理方式之Ҏ(gu) http://www.shnenglu.com/Khan/archive/2004/10/22/2651.htmlKhan's NotebookKhan's NotebookFri, 22 Oct 2004 14:21:00 GMThttp://www.shnenglu.com/Khan/archive/2004/10/22/2651.htmlhttp://www.shnenglu.com/Khan/comments/2651.htmlhttp://www.shnenglu.com/Khan/archive/2004/10/22/2651.html#Feedback0http://www.shnenglu.com/Khan/comments/commentRss/2651.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/2651.htmlservlet 的内部编码是 gbk
大家q行~码转换的时候记得这点就好了

Khan's Notebook 2004-10-22 22:21 发表评论
]]>
java servlet 的字Wfilter (转蝲至chinajavaworld.com) http://www.shnenglu.com/Khan/archive/2004/10/22/2652.htmlKhan's NotebookKhan's NotebookFri, 22 Oct 2004 13:52:00 GMThttp://www.shnenglu.com/Khan/archive/2004/10/22/2652.htmlhttp://www.shnenglu.com/Khan/comments/2652.htmlhttp://www.shnenglu.com/Khan/archive/2004/10/22/2652.html#Feedback0http://www.shnenglu.com/Khan/comments/commentRss/2652.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/2652.html
 package filters;
/*
* XP Forum
*
* Copyright (c) 2002-2003 RedSoft Group. All rights reserved.
*
*/

import javax.servlet.
*;
import java.io.IOException;

/**
* <p>Filter that sets the character encoding to be used in parsing the
* incoming request, either unconditionally or only if the client did not
* specify a character encoding. Configuration of this filter is based on
* the following initialization parameters:</p>
* <ul>
* <li><strong>encoding</strong> - The character encoding to be configured
* for this request, either conditionally or unconditionally based on
* the <code>ignore</code> initialization parameter. This parameter
* is required, so there is no default.</li>
* <li><strong>ignore</strong> - If set to "true", any character encoding
* specified by the client is ignored, and the value returned by the
* <code>selectEncoding()</code> method is set. If set to "false,
* <code>selectEncoding()</code> is called <strong>only</strong> if the
* client has not already specified an encoding. By default, this
* parameter is set to "true".</li>
* </ul>
*
* <p>Although this filter can be used unchanged, it is also easy to
* subclass it and make the <code>selectEncoding()</code> method more
* intelligent about what encoding to choose, based on characteristics of
* the incoming request (such as the values of the <code>Accept-Language</code>
* and <code>User-Agent</code> headers, or a value stashed in the current
* user's session.</p>
*
* @author <a href="mailto:jwtronics@yahoo.com">John Wong</a>
*
* @version $Id: SetCharacterEncodingFilter.java,v 1.1 2002/04/10 13:59:27 johnwong Exp $
*/
public class SetCharacterEncodingFilter
   implements Filter {

// ----------------------------------------------------- Instance Variables

 
/**
  * The default character encoding to set for requests that pass through
  * this filter.
  
*/
 protected String encoding 
= null;

 
/**
  * The filter configuration object we are associated with. If this value
  * is null, this filter instance is not currently configured.
  
*/
 protected FilterConfig filterConfig 
= null;

 
/**
  * Should a character encoding specified by the client be ignored?
  
*/
 protected 
boolean ignore = true;

// --------------------------------------------------------- Public Methods

 
/**
  * Take this filter out of service.
  
*/
 public 
void destroy() {

   
this.encoding = null;
   
this.filterConfig = null;

 }

 
/**
  * Select and set (if specified) the character encoding to be used to
  * interpret request parameters for this request.
  *
  * @param request The servlet request we are processing
  * @param result The servlet response we are creating
  * @param chain The filter chain we are processing
  *
  * @exception IOException if an input/output error occurs
  * @exception ServletException if a servlet error occurs
  
*/
 public 
void doFilter(ServletRequest request, ServletResponse response,
                      FilterChain chain) throws IOException, ServletException {

// Conditionally select and set the character encoding to be used
   if (ignore || (request.getCharacterEncoding() == null)) {
     String encoding 
= selectEncoding(request);
     
if (encoding != null) {
       request.setCharacterEncoding(encoding);
     }
   }

// Pass control on to the next filter
   chain.doFilter(request, response);

 }

 
/**
  * Place this filter into service.
  *
  * @param filterConfig The filter configuration object
  
*/
 public 
void init(FilterConfig filterConfig) throws ServletException {

   
this.filterConfig = filterConfig;
   
this.encoding = filterConfig.getInitParameter("encoding");
   String value 
= filterConfig.getInitParameter("ignore");
   
if (value == null) {
     
this.ignore = true;
   }
   
else if (value.equalsIgnoreCase("true")) {
     
this.ignore = true;
   }
   
else if (value.equalsIgnoreCase("yes")) {
     
this.ignore = true;
   }
   
else {
     
this.ignore = false;
   }

 }

// ------------------------------------------------------ Protected Methods

 
/**
  * Select an appropriate character encoding to be used, based on the
  * characteristics of the current request and/or filter initialization
  * parameters. If no character encoding should be set, return
  * <code>null</code>.
  * <p>
  * The default implementation unconditionally returns the value configured
  * by the <strong>encoding</strong> initialization parameter for this
  * filter.
  *
  * @param request The servlet request we are processing
  
*/
 protected String selectEncoding(ServletRequest request) {

   
return (this.encoding);

 }

//EOC


web.xml 中的配置:

 <filter>
   
<filter-name>Set Character Encoding</filter-name>
   
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
   
<init-param>
     
<param-name>encoding</param-name>
     
<param-value>GB2312</param-value>
   
</init-param>
   
<init-param>
     
<param-name>ignore</param-name>
     
<param-value>true</param-value>
   
</init-param>
 
</filter> 

 
<filter-mapping>
   
<filter-name>Set Character Encoding</filter-name>
   
<servlet-name>action</servlet-name>
 
</filter-mapping> 

 
<servlet>
   
<servlet-name>action</servlet-name>
   
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
.... 

试通过.


他的qo(h)器我试了有问题,q样没有问题了
<filter>
   
<filter-name>EncodingFilter</filter-name>
   
<display-name>EncodingFilter</display-name>
   
<description>no description</description>
   
<filter-class>com.zhaoqi.util.EncodingFilter</filter-class>
   
<init-param>
     
<param-name>encoding</param-name>
     
<param-value>GB2312</param-value>
   
</init-param>
 
</filter>
 
<filter-mapping>
   
<filter-name>EncodingFilter</filter-name>
   
<url-pattern>/*</url-pattern>
 
</filter-mapping>


? 看下面这短代码,׃struts的每个请求都要由actionservlet处理Q所以我自己写了一个actionservlet的子c,在这个类中我 调用request.setCharacterEncoding("GB2312");Ҏ(gu)Q然后在所有的jsp面中的字符昄为GB2312Q所有的 问题都解决了Q哈哈。大家试试啊
 
import org.apache.struts.action.ActionServlet;
import javax.servlet.http.
*;
public class MainActionServlet extends ActionServlet{
 public MainActionServlet() {
 }
 protected 
void process(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException {
   
/**@todo Override this org.apache.struts.action.ActionServlet method*/
   request.setCharacterEncoding(
"GB2312");
   super.process(request, response);
 }


Khan's Notebook 2004-10-22 21:52 发表评论
]]>
servlet和JSPqo(h)器Filter http://www.shnenglu.com/Khan/archive/2004/10/22/2653.htmlKhan's NotebookKhan's NotebookFri, 22 Oct 2004 13:45:00 GMThttp://www.shnenglu.com/Khan/archive/2004/10/22/2653.htmlhttp://www.shnenglu.com/Khan/comments/2653.htmlhttp://www.shnenglu.com/Khan/archive/2004/10/22/2653.html#Feedback1http://www.shnenglu.com/Khan/comments/commentRss/2653.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/2653.html阅读全文

Khan's Notebook 2004-10-22 21:45 发表评论
]]>
关于Zjsp+resin的移动wap的中文参C递问? http://www.shnenglu.com/Khan/archive/2004/10/22/2654.htmlKhan's NotebookKhan's NotebookFri, 22 Oct 2004 13:43:00 GMThttp://www.shnenglu.com/Khan/archive/2004/10/22/2654.htmlhttp://www.shnenglu.com/Khan/comments/2654.htmlhttp://www.shnenglu.com/Khan/archive/2004/10/22/2654.html#Feedback0http://www.shnenglu.com/Khan/comments/commentRss/2654.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/2654.htmlq句,我将一个中文参C递到free.jsp面


free.jsp
<%response.setContentType("text/vnd.wap.wml;charset=UTF-8");%>
<%@ page import="Comm.outWML"%>
<%@ page import="Comm.GB2U"%>

<?xml version="1.0" ?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
    
<head>
        
<meta http-equiv="Cache-Control" content="max-age=0" forua="true"/>
    
</head>

    
<card id="main" title="<%=Comm.GB2U.gb2u("劲歌金曲爬行?/span>")%>">
        
<%@ include file="mobinfo.inc" %>
        
<%@ include file="module.inc" %>
        
<%
           String para 
= new String(request.getParameter("name").getBytes("iso8859_1"));
           out.print(
"<p>"+para+"</p>");//输出获得的参?都ؓ(f)q
           out.print(outWML.outHref(DefaultURL
+"mring.jsp",  "劲歌金曲爬行榜首?/span>"));
           out.print(monternet);
        
%>
    
</card>
</wml>

出来的结果怎么都是q

是关于java?java的默认参C递方式是utf8?今天l于解决?
不是g说的问题
在发送urlh的页面和接收urlh的页面做如下讄
<%response.setContentType("text/vnd.wap.wml;charset=UTF-8");%>//utf8
<%request.setCharacterEncoding("UTF-8");%>//参数处理方式utf8
<%@ page pageEncoding="ISO-8859-1"%>//面字符处理方式 iso-8859-1

2004-07-06 11:33 | khan
 
o?按照ISO-8859-1传递就行了Q我怎么记得也会(x)出问题呢Q过|关的时候也?x)出点莫名其妙的事情?

我是都urlencode了,然后替换一?Q然后程序再解码?
2004-07-08 09:05 | virushuo

 

呵呵,普通的传递用urlencode.class,解码用urldecode.class
表单的传递用iso-8859-1可以了,呵呵

以上是指Ud的wap业务,所有汉字编码必Lutf8的情况下


Khan's Notebook 2004-10-22 21:43 发表评论
]]>
java 的Statement 对象http://www.shnenglu.com/Khan/archive/2004/10/22/2655.htmlKhan's NotebookKhan's NotebookFri, 22 Oct 2004 13:41:00 GMThttp://www.shnenglu.com/Khan/archive/2004/10/22/2655.htmlhttp://www.shnenglu.com/Khan/comments/2655.htmlhttp://www.shnenglu.com/Khan/archive/2004/10/22/2655.html#Feedback0http://www.shnenglu.com/Khan/comments/commentRss/2655.htmlhttp://www.shnenglu.com/Khan/services/trackbacks/2655.htmlStatement
本概q是从《JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference 》这本书中摘引来的?b style="color: black; background-color: rgb(160, 255, 255);">JavaSoft 目前正在准备q本书。这是一本教E,同时也是 JDBC 的重要参考手册,它将作ؓ(f) Java pd的组成部份在 1997 q春季由 Addison-Wesley 出版公司出版?


4.1 概述
Statement 对象用于?SQL 语句发送到数据库中。实际上有三U?Statement 对象Q它们都作ؓ(f)在给定连接上执行 SQL 语句的包容器Q?b style="color: black; background-color: rgb(255, 255, 102);">Statement、PreparedStatementQ它?Statement l承而来Q和 CallableStatementQ它?PreparedStatement l承而来Q。它们都专用于发送特定类型的 SQL 语句Q?Statement 对象用于执行不带参数的简?SQL 语句QPreparedStatement 对象用于执行带或不带 IN 参数的预~译 SQL 语句QCallableStatement 对象用于执行Ҏ(gu)据库已存储过E的调用?br>
Statement 接口提供了执行语句和获取l果的基本方法。PreparedStatement 接口d了处?IN 参数的方法;?CallableStatement d了处?OUT 参数的方法?br>

4.1.1 创徏 Statement 对象
建立了到特定数据库的q接之后Q就可用该连接发?SQL 语句?b style="color: black; background-color: rgb(255, 255, 102);">Statement 对象?Connection 的方?createStatement 创徏Q如下列代码D中所C:(x)

Connection con = DriverManager.getConnection(url, "sunny", "");
Statement stmt = con.createStatement();

Z执行 Statement 对象Q被发送到数据库的 SQL 语句被作ؓ(f)参数提供l?Statement 的方法:(x)

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table2");

4.1.2 使用 Statement 对象执行语句
Statement 接口提供了三U执?SQL 语句的方法:(x)executeQuery、executeUpdate ?execute。用哪一个方法由 SQL 语句所产生的内容决定?br>
Ҏ(gu) executeQuery 用于产生单个l果集的语句Q例?SELECT 语句?br>
? ?executeUpdate 用于执行 INSERT、UPDATE ?DELETE 语句以及(qing) SQL DDLQ数据定义语aQ语句,例如 CREATE TABLE ?DROP TABLE。INSERT、UPDATE ?DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整敎ͼ指示受媄响的行数Q即更新计数Q。对? CREATE TABLE ?DROP TABLE {不操作行的语句QexecuteUpdate 的返回值Mؓ(f)零?br>
Ҏ(gu) execute 用于执行q回多个l果集、多个更新计数或二者组合的语句。因为多数程序员不会(x)需要该高功能Q所以本概述后面在单独一节中对其q行介绍?br>
执行语句的所有方法都关闭所调用?Statement 对象的当前打开l果集(如果存在Q。这意味着在重新执?Statement 对象之前Q需要完成对当前 ResultSet 对象的处理?br>
应注意,l承?Statement 接口中所有方法的 PreparedStatement 接口都有自己?executeQuery、executeUpdate ?execute Ҏ(gu)?b style="color: black; background-color: rgb(255, 255, 102);">Statement 对象本n不包?SQL 语句Q因而必ȝ Statement.execute Ҏ(gu)提供 SQL 语句作ؓ(f)参数。PreparedStatement 对象q不?SQL 语句作ؓ(f)参数提供l这些方法,因ؓ(f)它们已经包含预编?SQL 语句。CallableStatement 对象l承q些Ҏ(gu)?PreparedStatement 形式。对于这些方法的 PreparedStatement ?CallableStatement 版本Q用查询参数将抛出 SQLException?br>

4.1.3 语句完成
? q接处于自动提交模式Ӟ其中所执行的语句在完成时将自动提交或还原。语句在已执行且所有结果返回时Q即认ؓ(f)已完成。对于返回一个结果集? executeQuery Ҏ(gu)Q在索完 ResultSet 对象的所有行时该语句完成。对于方? executeUpdateQ当它执行时语句卛_成。但在少数调用方?execute 的情况中Q在索所有结果集或它生成的更新计C后语句才完成?br>
有些 DBMS 已存储q程中的每条语句视ؓ(f)独立的语句;而另外一些则整个过E视Z个复合语句。在启用自动提交Ӟq种差别变得非帔R要,因ؓ(f)它媄响什么时候调?commit Ҏ(gu)。在前一U情况中Q每条语句单独提交;在后一U情况中Q所有语句同时提交?br>

4.1.4 关闭 Statement 对象
Statement 对象由 Java 垃圾攉E序自动关闭。而作ZU好的编E风|应在不需?Statement 对象时显式地关闭它们。这立即释?DBMS 资源Q有助于避免潜在的内存问题?br>

4.1.5 Statement 对象中的 SQL 转义语法
Statement 可包含?SQL 转义语法?SQL 语句。{义语法告诉驱动程序其中的代码应该以不同方式处理。驱动程序将扫描M转义语法Qƈ它转换成特定数据库可理解的代码。这使得转义语法?DBMS 无关Qƈ允许E序员用在没有转义语法时不可用的功能?br>
转义子句p括号和关键字界定Q?

{keyword . . . parameters . . . }

该关键字指示转义子句的类型,如下所C?br>

escape 表示 LIKE 转义字符


字符?”和“_”类g SQL LIKE 子句中的通配W(?”匹配零个或多个字符Q而“_”则匚w一个字W)。ؓ(f)了正解释它们,应在其前面加上反斜杠Q“\”)Q它是字W串中的Ҏ(gu)转义字符。在查询末尾包括如下语法卛_指定用作转义字符的字W:(x)

{escape 'escape-character'}


例如Q下列查询用反斜杠字符作ؓ(f)转义字符Q查找以下划U开头的标识W名Q?

stmt.executeQuery("SELECT name FROM Identifiers
WHERE Id LIKE `\_%' {escape `\'};


fn 表示标量函数


几乎所?DBMS 都具有标量值的数倹{字W串、时间、日期、系l和转换函数。要使用q些函数Q可使用如下转义语法Q关键字 fn 后跟所需的函数名?qing)其参数。例如,下列代码调用函数 concat 两个参数连接在一P(x)

{fn concat("Hot", "Java")};


可用下列语法获得当前数据库用户名Q?

{fn user()};


? 量函数可能由语法E有不同?DBMS 支持Q而它们可能不被所有驱动程序支持。各U?DatabaseMetaData Ҏ(gu)列出所支持的函数。例如,Ҏ(gu) getNumericFunctions q回用逗号分隔的数值函数列表,而方? getStringFunctions 返回字W串函数Q等{?br>
驱动E序{义函数调用映ؓ(f)相应的语法,或直接实现该函数?br>

d、t ?ts 表示日期和时间文?br>

DBMS 用于日期、时间和旉标记文字的语法各不相同。JDBC 使用转义子句支持q些文字的语法的 ISO 标准格式。驱动程序必d转义子句转换?DBMS 表示?br>
例如Q可用下列语法在 JDBC SQL 语句中指定日期:(x)

{d `yyyy-mm-dd'}


在该语法中,yyyy 为年代,mm 为月份,?dd 则ؓ(f)日期。驱动程序将用等L(fng)特定?DBMS 的表C替换这个{义子句。例如,如果 '28- FEB-99' W合基本数据库的格式Q则驱动E序用它替?{d 1999-02-28}?br>
对于 TIME ?TIMESTAMP 也有cM的{义子句:(x)

{t `hh:mm:ss'}
{ts `yyyy-mm-dd hh:mm:ss.f . . .'}


TIMESTAMP 中的数点后的秒Q?f . . .Q部分可忽略?br>

call ?? = call 表示已存储过E?br>


如果数据库支持已存储q程Q则可从 JDBC 中调用它们,语法为:(x)

{call procedure_name[(?, ?, . . .)]}


或(其中q程q回l果参数Q:(x)

{? = call procedure_name[(?, ?, . . .)]}


Ҏ(gu)hC其中的内容是可选的。它们不是语法的必要部分?br>
输入参数可以为文字或参数。有兌l信息,参见 JDBC 指南中第 7 节,“CallableStatement”?br>
可通过调用Ҏ(gu) DatabaseMetaData.supportsStoredProcedures 查数据库是否支持已存储过E?br>


oj 表示外部q接



外部q接的语法ؓ(f)

{oj outer-join}


其中 outer-join 形式?

table LEFT OUTER JOIN {table / outer-join} ON search-condition


? 部连接属于高U功能。有兛_们的解释可参?SQL 语法。JDBC 提供了三U?DatabaseMetaData Ҏ(gu)用于定驱动E序支持哪些外部q接cdQsupportsOuterJoins、supportsFullOuterJoins ? supportsLimitedOuterJoins?br>

Ҏ(gu) Statement.setEscapeProcessing 可打开或关闭{义处理;~省状态ؓ(f)打开。当性能极ؓ(f)重要ӞE序员可能想关闭它以减少处理旉。但通常它将Z打开状态。应注意Q?setEscapeProcessing 不适用?PreparedStatement 对象Q因为在调用该语句前它就可能已被发送到数据库。有关预~译的信息,参见 PreparedStatement?br>

4.1.6 使用Ҏ(gu) execute
execute Ҏ(gu)应该仅在语句能返回多?ResultSet 对象、多个更新计数或 ResultSet 对象与更新计数的l合时用。当执行某个已存储过E或动态执行未?SQL 字符Ԍ卛_用程序程序员在编译时未知Q时Q有可能出现多个l果的情况,管q种情况很少见。例如,用户可能执行一个已存储q程Q?CallableStatement 对象 - 参见W?135 늚 CallableStatementQ,q且该已存储q程可执行更斎ͼ然后执行选择Q再q行更新Q再q行选择Q等{。通常使用已存储过E的人应知道它所q回的内宏V?br>
? 为方?execute 处理非常规情况,所以获取其l果需要一些特D处理ƈ不为怪。例如,假定已知某个q程q回两个l果集,则在使用Ҏ(gu) execute 执行该过E后Q必调用方?getResultSet 获得W一个结果集Q然后调用适当?getXXX Ҏ(gu)获取其中的倹{要获得W二个结果集Q需要先调用 getMoreResults Ҏ(gu)Q然后再调用 getResultSet Ҏ(gu)。如果已知某个过E返回两个更新计敎ͼ则首先调用方?getUpdateCountQ然后调?getMoreResultsQƈ再次调用 getUpdateCount?br>
对于不知道返回内容,则情冉|为复杂。如果结果是 ResultSet 对象Q则Ҏ(gu) execute q回 trueQ如果结果是 Java intQ则q回 false。如果返?intQ则意味着l果是更新计数或执行的语句是 DDL 命o(h)。在调用Ҏ(gu) execute 之后要做的第一件事情是调用 getResultSet ?getUpdateCount。调用方?getResultSet 可以获得两个或多? ResultSet 对象中第一个对象;或调用方?getUpdateCount 可以获得两个或多个更新计CW一个更新计数的内容?br>
? SQL 语句的结果不是结果集Ӟ则方?getResultSet 返? null。这可能意味着l果是一个更新计数或没有其它l果。在q种情况下,判断 null 真正含义的唯一Ҏ(gu)是调用方? getUpdateCountQ它?yu)返回一个整数。这个整Cؓ(f)调用语句所影响的行敎ͼ如果?-1 则表C结果是l果集或没有l果。如果方? getResultSet 已返?nullQ表C结果不?ResultSet 对象Q,则返回?-1 表示没有其它l果。也是_(d)当下列条件ؓ(f)真时表示没有l果Q或没有其它l果Q:(x)

((stmt.getResultSet() == null) && (stmt.getUpdateCount() == -1))

? 果已l调用方?getResultSet q处理了它返回的 ResultSet 对象Q则有必要调用方?getMoreResults 以确定是否有其它l果集或更新计数。如?getMoreResults q回 trueQ则需要再ơ调?getResultSet 来检索下一个结果集。如上所qͼ如果 getResultSet q回 nullQ则需要调?getUpdateCount 来检?null 是表C结果ؓ(f)更新计数q是表示没有其它l果?br>
?getMoreResults q回 false Ӟ它表C SQL 语句q回一个更新计数或没有其它l果。因此需要调用方?getUpdateCount 来检查它是哪一U情c在q种情况下,当下列条件ؓ(f)真时表示没有其它l果Q?

((stmt.getMoreResults() == false) && (stmt.getUpdateCount() == -1))

下面的代码演CZ一U方法用来确认已讉K调用Ҏ(gu) execute 所产生的全部结果集和更新计敎ͼ(x)

stmt.execute(queryStringWithUnknownResults); while (true) {
  
int rowCount = stmt.getUpdateCount();
  
if (rowCount > 0) { // 它是更新计数
    System.out.println("Rows changed = " + count);
    stmt.getMoreResults();
    
continue;
  }
  
if (rowCount == 0) { // DDL 命o(h)?nbsp;0 个更?/span>
    System.out.println(" No rows changed or statement was DDL
                       command
");
                       stmt.getMoreResults();
                       
continue;

// 执行到这里,证明有一个结果集
//
 或没有其它结?/span>

  }

  ResultSet rs 
= stmt.getResultSet;
  
if (rs != null) {
    
while (rs.next()) { // 使用元数据获得关于结果集列的信息
       // 处理l果
          stmt.getMoreResults();
      
continue;
    }
    
break



Khan's Notebook 2004-10-22 21:41 发表评论
]]>
þۺ㽶AV| 91ƷùۺϾþ| þþƷAV| þ99Ʒþþ| þþ뾫Ʒҹ| պavþþƷ| þ99þóѲ| ŷ츾XXXXԾþþ | Ļþи| þˬˬˬ˾þþ| һŷƬþ| 996þùƷ߹ۿ| þĻavŮ| ɫۺϾþ| þùѹۿƷ3| ޹˾þۺһ77| þ99ۺϾƷ| պŷۺϾþ| þþþƷþþþɫӰ| þþƷ}Ů| ɫʹþۺ| ĻӰӾþþ| ƷþþĻ| þ޸ۿ| þþƷavˮ | þþþþþ99Ʒѹۿ| þ99ֻоƷ| þ| Ʒһþ㽶߿| þùƷ99| ŷɫ۾þþƷ| ڸþþþþ| 2020þþƷۺһ| ۺϾþøϾþúݺݺ97ɫ| þó18վ| þԭƷ| Ʒһþ㽶߿| 91Ʒþþþþ| Ʒþþþ龫Ʒ| þ޹ŷ޾Ʒһ| 99þù޸ۿ2024|