<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    落落空間

    緣來是java
    posts - 12, comments - 12, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    2009年11月5日

    前提:兩個項目A和B,其中項目A登錄之后擁有了自己的session,項目B想共用此session,通過項目A的servlet回調項目B的servlet,并給其傳遞sessionId,在項目B中通過sessionId調用遠程接口獲取session并賦值給自己的session,項目B再一次發起請求時自己創建的sessionId被改變,session丟失。
    解決辦法:
    在項目B的servlet內加入:Response.AddHeader("P3P","CP=CAO PSA OUR");
    原因:ie默認不接受沒有標識為安全的第三方cookie,造成不能保存cookie及session。

    posted @ 2009-11-05 17:10 落落 閱讀(2696) | 評論 (0)編輯 收藏

    2007年7月31日

    有時候要限制用戶可輸入的內容限制為英文字母和數字,即希望關閉輸入法

    這時候只要簡單的對要限制的控件加上一個ime-mode的css屬性即可,如<input style="ime-mode:disabled">

    ime-mode    CSS提議屬性

    語法:
    ime-mode : auto | active | inactive | disabled
     
    參數:
    auto : 不影響IME的狀態。與不指定ime-mode屬性時相同
    active : 指定所有使用IME輸入的字符。即激活本地語言輸入法。用戶仍可以撤銷激活IME
    inactive : 指定所有不使用IME輸入的字符。即激活非本地語言。用戶仍可以撤銷激活IME
    disabled : 完全禁用IME。對于有焦點的控件(如輸入框),用戶不可以激活IME
     
    說明:
    設置或檢索是否允許用戶激活輸入中文,韓文,日文等的輸入法(IME)狀態。
    對應的腳本特性為imeMode。
     
    示例:
    <input type=text style='ime-mode: disabled; '>

    posted @ 2007-07-31 17:09 落落 閱讀(1371) | 評論 (1)編輯 收藏

    2007年7月26日

    基于模板的Web表示層技術 (摘自《Spring開發指南》)

    傳統的JSP技術為Web表現層技術提供了靈活、豐富的功能支持。然而,站在工程的角度
    而言,過于凌亂的JSP Script也成為系統維護的頭號大敵。
    JSP 代碼幾乎等同于Java 代碼,在提供了最豐富的特性支持的同時,也為系統的開發帶
    來一些隱患,程序員往往天馬行空,不為羈束,在JSP 中將業務邏輯、數據邏輯、表現邏輯代
    碼相混雜,代碼重用性、系統可維護性極低。特別是在參與開發人員眾多,技術水平良莠不齊
    的情況下,縱使技術經理一再強調設計規范的約束,但人本的約束總是難以控制,隨著開發過
    程進展和產品上線壓力的增大,規范約束逐漸薄弱,于是難以避免的造成代碼的混亂,可維護
    性的下降。
    面對這個問題,眾多組織和廠商開始研發自己的表現層框架,試圖通過一個隔離的表現層
    框架,強行將表現層和邏輯層相剝離。時間似乎退回到了最初Web 端只支持Servlet 技術的
    時代(那時候或多或少各個公司都有自己的模板實現)。不過,現在的模板技術經過長時間的
    發展,已經將表現層的能力發揮得淋漓盡致,不失為JSP技術之外的一個明智選擇。

    模板技術相對傳統JSP技術有以下三個主要優勢:
    1. 在技術層面,將表現邏輯與業務邏輯相分離。
    2. 為人員之間的分工提供了一個良好的分界點。頁面美工只需專著關心模板的設計,而程序員則專注于業務邏輯的實現。二者重合點明顯減少。
    3. 如果需要,模板引擎可脫離Web 容器單獨運行,這為系統可能的移植需求提供了更多的彈性空間(這一特性在應用中也許并不會有太大的實際意義,只是提供了一種附加選擇)。

    目前Spring支持一下幾種模板技術:
    1. XSLT
    XSLT是基于XML的表現層模板技術,伴隨著XML的大量使用。XSLT也日漸成熟,并
    迅速成為主流表現層技術之一。XSLT作為一個通用表現層框架,擁有最好的平臺適應性,
    幾乎所有的主流程序設計語言都提供了XLST支持,現有的XLST模板可以簡單的移植到不
    同的語言平臺
    ,如將J2EE應用中的XSLT移植到.net平臺,這樣的可移植性是其他專用
    模板技術,如Velocity和Freemarker難以達到的。
    筆者在2001年在一個原型項目中采用了XSLT作為表現層實現,由于當時XSLT尚不
    成熟,XSLT解析器效率低下,因此在正式產品開發中使用其他技術作為替代。在2003年
    中,經過技術探討,決定再次在項目實施中引入XSLT 技術,相對兩年前,此時的XSLT
    技術已經相當成熟,解析器的效率也大大改善。經過半年時間的項目研發,產品上線,并
    取得了令人滿意的表現。不過,在之后的項目回顧過程中,筆者認為,目前在項目中大量
    采用XSLT技術尚不可取,上述項目開發過程中,XSLT技術提供了極佳的擴展性和重用性,
    也保證了業務邏輯和表示邏輯的清晰劃分,然而,最大的問題是,XSLT缺乏強有力的編輯
    器支持。雖然通過XML/XSLT 技術成全了設計上近乎完美的表現,但卻為界面開發帶來了
    極大難度,以至后期復雜界面的修改都需要消耗極大的人力,得不償失。

    筆者在項目開發中所用的XSLT 編輯器為StylusStudio 和XmlSpy,目前這兩款編
    輯器可以算是XSLT開發的首選,提供了豐富的特性和可視化編輯功能。但即便如此,XLST
    繁雜苛刻的語法和調試上的難度也為開發工作帶來了極大的障礙。
    此外,也許是最重要的一點,xslt在性能上的表現尚不盡如人意。經過多年的發展,
    XSLT解析/合成器的性能相對最初已經大為改觀,但依然與其他模板技術存在著較大差距。
    據實地測試,FreeMarker和Velocity對于同等復雜度的表現層邏輯,平均處理速度是
    XSLT 的10 倍以上,這是一個不得不正視的性能溝壑。
    同時,XSLT 的內存占用也是
    FreeMarker 和Velocity 的數倍有余(XSLT 中,每個節點都是一個Java 對象,大量
    對象的存儲對內存占用極大,同時大量對象的頻繁創建和銷毀也對JVM 垃圾收集產生了較
    大負面影響)。
    在上述項目中,由于硬件上的充分冗余(8G RAM, 4CPU),才使得這些
    性能上的影響相對微弱。
    因此,目前在項目中大量引入XSLT技術尚需仔細考量。
    2. Velocity
    Velocity是Apache Jakarta項目中的一個子項目,它提供了豐富強大的模板功能。
    作為目前最為成熟的模板支持實現,Velocity 在諸多項目中得到了廣泛應用,不僅
    限于Web 開發,在眾多代碼生成系統中,我們也可以看到Velocity 的身影(如
    Hibernate中的代碼生成工具)。
    3. FreeMarker
    FreeMarker是Velocity之外的另一個模板組件。
    與Velocity 相比,FreeMarker 對表現邏輯和業務邏輯的劃分更為嚴格,
    Freemarker在模板中不允許對Servlet API進行直接操作(而Velocity可以),
    如FreeMarker 中禁止對HttpServletRequest 對象直接訪問(但可以訪問
    HttpServletRequest對象中的Attribute)。通過更加嚴格的隔離機制,牽涉邏
    輯處理的操作被強制轉移到邏輯層。從而完全保證了層次之間的清晰性。
    另外一個Velocity無法實現的特性,也是最具備實際意義的特性:FreeMarker對
    JSP Tag提供了良好支持。
    這一點可能存在一點爭議,JSP技術的最大問題就是容易
    在頁面中混入邏輯代碼。而FreeMarker 對JSP Tag 的支持似乎為這個問題又打開
    了大門。這一點上,我們可以將FreeMarker看作是僅允許使用TAG的JSP頁面(實
    際上,FreeMarker的表達式語法與EL語法也非常類似)。
    從開發角度而言,只允許使用TAG的JSP頁面,已經在很大程度上保證了頁面表現邏
    輯與業務邏輯的分離。
    程序員在JSP Script中混雜邏輯代碼的原因,大部分是出于
    慵懶,只要無法在頁面模板中直接編寫Java代碼,相信程序員也不會去專門編寫一個
    JSP TAG來刻意違反層次劃分原則。
    對JSP TAG 的支持為FreeMarker 帶來了極大的活力,目前開源社區中已經有了為
    數眾多的成熟Taglib,如DisplayTag、Struts Menu等,這些功能豐富,成熟可
    靠的Taglib,將為產品開發提供極大的便利。另一方面,這也為代碼重用提供了另一
    個可選途徑,避免了大部分模板實現在這一點上的不足。
    就筆者的經驗,對于Web開發而言,FreeMarker在生產效率和學習成本上更具優勢,
    而Velocity 的相對優勢在于更多第三方工具的支持和更廣泛的開發和用戶團體(然
    而對于一個輕量級模板類庫而言,這樣的優勢并不是十分明顯)。
    如果沒有Velocity的技術儲備,而又需要通過技術上的限定解決視圖/模型的劃分問
    題,這里推薦采用FreeMarker作為Spring MVC中的表現層實現。以獲得最好的(學
    習、開發)成本受益。

    posted @ 2007-07-26 16:06 落落 閱讀(1195) | 評論 (0)編輯 收藏

    2007年7月25日

    理解類的實現機制

      在JavaScript中可以使用function關鍵字來定義一個“類”,如何為類添加成員。在函數內通過this指針引用的變量或者方法都會成為類的成員,例如:
    程序代碼 程序代碼

    function class1(){
            var s="abc";
            this.p1=s;
            this.method1=function(){
                    alert("this is a test method");
            }
    }
    var obj1=new class1();

      通過new class1()獲得對象obj1,對象obj1便自動獲得了屬性p1和方法method1。

      在JavaScript中,function本身的定義就是類的構造函數,結合前面介紹過的對象的性質以及new操作符的用法,下面介紹使用new創建對象的過程。
      (1)當解釋器遇到new操作符時便創建一個空對象;
      (2)開始運行class1這個函數,并將其中的this指針都指向這個新建的對象;
      (3)因為當給對象不存在的屬性賦值時,解釋器就會為對象創建該屬性,例如在class1中,當執行到this.p1=s這條語句時,就會添加一個屬性p1,并把變量s的值賦給它,這樣函數執行就是初始化這個對象的過程,即實現構造函數的作用;
      (4)當函數執行完后,new操作符就返回初始化后的對象。

      通過這整個過程,JavaScript中就實現了面向對象的基本機制。由此可見,在JavaScript中,function的定義實際上就是實現一個對象的構造器,是通過函數來完成的。這種方式的缺點是:
      ·將所有的初始化語句、成員定義都放到一起,代碼邏輯不夠清晰,不易實現復雜的功能。
      ·每創建一個類的實例,都要執行一次構造函數。構造函數中定義的屬性和方法總被重復的創建,例如:
    程序代碼 程序代碼

    this.method1=function(){
                  alert("this is a test method");
           }

      這里的method1每創建一個class1的實例,都會被創建一次,造成了內存的浪費。下一節介紹另一種類定義的機制:prototype對象,可以解決構造函數中定義類成員帶來的缺點。


    使用prototype對象定義類成員
      現在介紹另一種為類添加成員的機制:prototype對象。當new一個function時,該對象的成員將自動賦給所創建的對象,例如:
    程序代碼 程序代碼

    <script language="JavaScript" type="text/javascript">
    <!--
     //定義一個只有一個屬性prop的類
     function class1(){
             this.prop=1;
     }
     //使用函數的prototype屬性給類定義新成員
     class1.prototype.showProp=function(){
             alert(this.prop);
     }
     //創建class1的一個實例
     var obj1=new class1();
     //調用通過prototype原型對象定義的showProp方法
     obj1.showProp();
    //-->
    </script>

      prototype是一個JavaScript對象,可以為prototype對象添加、修改、刪除方法和屬性。從而為一個類添加成員定義。

      了解了函數的prototype對象,現在再來看new的執行過程。
      (1)創建一個新的對象,并讓this指針指向它;
      (2)將函數的prototype對象的所有成員都賦給這個新對象;
      (3)執行函數體,對這個對象進行初始化操作;
      (4)返回(1)中創建的對象。

      和new的執行過程相比,多了用prototype來初始化對象的過程,這也和prototype的字面意思相符,它是所對應類的實例的原型。這個初始化過程發生在函數體(構造器)執行之前,所以可以在函數體內部調用prototype中定義的屬性和方法,例如:
    程序代碼 程序代碼

    <script language="JavaScript" type="text/javascript">
    <!--
    //定義一個只有一個屬性prop的類
    function class1(){
            this.prop=1;
            this.showProp();
    }
    //使用函數的prototype屬性給類定義新成員
    class1.prototype.showProp=function(){
            alert(this.prop);
    }
    //創建class1的一個實例
    var obj1=new class1();
    //-->
    </script>

      和上一段代碼相比,這里在class1的內部調用了prototype中定義的方法showProp,從而在對象的構造過程中就彈出了對話框,顯示prop屬性的值為1。

      需要注意,原型對象的定義必須在創建類實例的語句之前,否則它將不會起作用,例如:
    程序代碼 程序代碼

    <script language="JavaScript" type="text/javascript">
    <!--
    //定義一個只有一個屬性prop的類
    function class1(){
            this.prop=1;
            this.showProp();
    }
    //創建class1的一個實例
    var obj1=new class1();
    //在創建實例的語句之后使用函數的prototype屬性給類定義新成員,只會對后面創建的對象有效
    class1.prototype.showProp=function(){
            alert(this.prop);
    }
    //-->
    </script>

      這段代碼將會產生運行時錯誤,顯示對象沒有showProp方法,就是因為該方法的定義是在實例化一個類的語句之后。

      由此可見,prototype對象專用于設計類的成員,它是和一個類緊密相關的,除此之外,prototype還有一個重要的屬性:constructor,表示對該構造函數的引用,例如:
    程序代碼 程序代碼

    function class1(){
            alert(1);
    }
    class1.prototype.constructor(); //調用類的構造函數

      這段代碼運行后將會出現對話框,在上面顯示文字“1”,從而可以看出一個prototype是和一個類的定義緊密相關的。實際上:class1.prototype.constructor===class1。


    一種JavaScript類的設計模式

      前面已經介紹了如何定義一個類,如何初始化一個類的實例,且類可以在function定義的函數體中添加成員,又可以用prototype定義類的成員,編程的代碼顯得混亂。如何以一種清晰的方式來定義類呢?下面給出了一種類的實現模式。

      在JavaScript中,由于對象靈活的性質,在構造函數中也可以為類添加成員,在增加靈活性的同時,也增加了代碼的復雜度。為了提高代碼的可讀性和開發效率,可以采用這種定義成員的方式,而使用prototype對象來替代,這樣function的定義就是類的構造函數,符合傳統意義類的實現:類名和構造函數名是相同的。例如:
    程序代碼 程序代碼

    function class1(){
            //構造函數
    }
    //成員定義
    class1.prototype.someProperty="sample";
    class1.prototype.someMethod=function(){
            //方法實現代碼
    }  

      雖然上面的代碼對于類的定義已經清晰了很多,但每定義一個屬性或方法,都需要使用一次class1.prototype,不僅代碼體積變大,而且易讀性還不夠。為了進一步改進,可以使用無類型對象的構造方法來指定prototype對象,從而實現類的成員定義:
    程序代碼 程序代碼

    //定義一個類class1
    function class1(){
            //構造函數
    }
    //通過指定prototype對象來實現類的成員定義
    class1.prototype={
            someProperty:"sample",   someMethod:function(){
                 //方法代碼
            },
            …//其他屬性和方法.
    }

      上面的代碼用一種很清晰的方式定義了class1,構造函數直接用類名來實現,而成員使用無類型對象來定義,以列表的方式實現了所有屬性和方法,并且可以在定義的同時初始化屬性的值。這也更象傳統意義面向對象語言中類的實現。只是構造函數和類的成員定義被分為了兩個部分,這可看成JavaScript中定義類的一種固定模式,這樣在使用時會更加容易理解。

      注意:在一個類的成員之間互相引用,必須通過this指針來進行,例如在上面例子中的someMethod方法中,如果要使用屬性someProperty,必須通過this.someProperty的形式,因為在JavaScript中每個屬性和方法都是獨立的,它們通過this指針聯系在一個對象上。

    posted @ 2007-07-25 15:27 落落 閱讀(235) | 評論 (0)編輯 收藏

    2007年7月6日

    異常信息:

    2007-5-16 10:47:42 org.apache.coyote.http11.Http11AprProtocol init

    信息: Initializing Coyote HTTP/1.1 on http-9090

    2007-5-16 10:47:42 org.apache.coyote.ajp.AjpAprProtocol init

    信息: Initializing Coyote AJP/1.3 on ajp-8009

    2007-5-16 10:47:42 org.apache.catalina.startup.Catalina load

    信息: Initialization processed in 2164 ms

    2007-5-16 10:47:43 org.apache.catalina.core.StandardService start

    信息: Starting service Catalina

    2007-5-16 10:47:43 org.apache.catalina.core.StandardEngine start

    信息: Starting Servlet Engine: Apache Tomcat/5.5.23

    2007-5-16 10:47:43 org.apache.catalina.core.StandardHost start

    信息: XML validation disabled

    log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).

    log4j:WARN Please initialize the log4j system properly.

    2007-5-16 10:47:50 org.apache.catalina.core.StandardContext start

    嚴重: Error filterStart

    2007-5-16 10:47:50 org.apache.catalina.core.StandardContext start

    嚴重: Context [/BookManage] startup failed due to previous errors

    2007-5-16 10:47:51 org.apache.catalina.core.ApplicationContext log

    信息: ContextListener: contextInitialized()

    2007-5-16 10:47:51 org.apache.catalina.core.ApplicationContext log

    信息: SessionListener: contextInitialized()

    2007-5-16 10:47:52 org.apache.catalina.core.ApplicationContext log

    信息: ContextListener: contextInitialized()

    2007-5-16 10:47:52 org.apache.catalina.core.ApplicationContext log

    信息: SessionListener: contextInitialized()

    2007-5-16 10:47:57 org.apache.catalina.loader.WebappClassLoader validateJarFile

    信息: validateJarFile(C:\Tomcat 5.5\webapps\TopHyTree\WEB-INF\lib\servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

    log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).

    log4j:WARN Please initialize the log4j system properly.

    2007-5-16 10:48:01 org.apache.coyote.http11.Http11AprProtocol start

    信息: Starting Coyote HTTP/1.1 on http-9090

    2007-5-16 10:48:02 org.apache.coyote.ajp.AjpAprProtocol start

    信息: Starting Coyote AJP/1.3 on ajp-8009

    2007-5-16 10:48:03 org.apache.catalina.storeconfig.StoreLoader load

    信息: Find registry server-registry.xml at classpath resource

    2007-5-16 10:48:03 org.apache.catalina.startup.Catalina start

    信息: Server startup in 20835 ms

    紅色字體為出錯信息,原來以為是用Filter(過濾器或者攔截器)出錯,因為把web.xml里的filter配置去掉,就正常起來了,在網上查找發現兩種情況:

        1、運用Filte包不齊全
     2、第二種情況:

    google里搜索Error filterStart里有個文章說tomcat里的bug,沒有實現javax.servlet.FilterFilter會報這樣的錯誤:

    看來tomcat在啟動就初始化Filter實例了,可能是Filter里的啥東東執行出錯導致可能,看看Filterinit里用到一句

    mServ = (ModuleService)WebUtils.getApplicationContext(config.getServletContext()).getBean("moduleService");

    是最可能發生錯誤了,因為這里用到了springorg.springframework.web.context.ContextLoaderServlet,如果啟動這時還沒有建立該servlet實例,務必導致獲取失敗,拋出錯誤。先屏蔽一下這句話,果真啟動正常了,修改一下代碼,將init里的這句話丟到了doFilter里面

            if(mServ==null)
                mServ = (ModuleService)WebUtils.getApplicationContext(filterConfig.getServletContext()).getBean("moduleService");

    不過Tomcat也真是,解析web.xml的順序上還是太僵硬了。

    我的出錯情況:

    經仔細推敲查找發現是配置文件struts.xml配置時候action文件名錯誤

    原因:tomcat啟動時會通過web.xml文件尋找struts.xml文件。又因struts2.0默認有攔截器的,所以如果這里的有錯誤信息,就會報Filter錯誤,很容易引起誤導。

    posted @ 2007-07-06 17:54 落落 閱讀(2303) | 評論 (6)編輯 收藏

    2007年6月25日

    用法:

    <div id="test">
       <span style="color:red">test1</span> test2
    </div>

    在JS中可以使用:

    test.innerHTML:

      也就是從對象的起始位置到終止位置的全部內容,包括Html標簽。

      上例中的test.innerHTML的值也就是“<span style="color:red">test1</span> test2 ”。

    test.innerText: 

      從起始位置到終止位置的內容, 但它去除Html標簽 

      上例中的text.innerTest的值也就是“test1 test2”, 其中span標簽去除了。

    test.outerHTML:

      除了包含innerHTML的全部內容外, 還包含對象標簽本身。

      上例中的text.outerHTML的值也就是<div id="test"><span style="color:red">test1</span> test2</div>


    完整示例:

    <div id="test">
       <span style="color:red">test1</span> test2
    </div>

    <a href="javascript:alert(test.innerHTML)">innerHTML內容</a>
    <a href="javascript:alert(test.innerText)">inerHTML內容</a>
    <a href="javascript:alert(test.outerHTML)">outerHTML內容</a>

    特別說明:

      innerHTML是符合W3C標準的屬性,而innerText只適用于IE瀏覽器,因此,盡可能地去使用innerHTML,而少用innerText,如果要輸出不含HTML標簽的內容,可以使用innerHTML取得包含HTML標簽的內容后,再用正則表達式去除HTML標簽,下面是一個簡單的符合W3C標準的示例:

    <a href="javascript:alert(document.getElementById('test').innerHTML.replace(/<.+?>/gim,''))">無HTML,符合W3C標準</a>

    posted @ 2007-06-25 08:31 落落 閱讀(711) | 評論 (2)編輯 收藏

    2007年6月20日

           由于HTML中的對象都是層次結構,比如一個Table包含了多個TR,一個TR包含了多個TD.
           Bubble就是一個事件可以從子節點向父節點傳遞,簡單的講就是他的父級以上的東西的事件不觸發。
           例子:
                <script   language="javascript">  
                     function   document.onclick()  
                    {  
                          alert("in   the   document's   event   handler!");  
                    }  
       
                    function   clickMe()  
                   {  
                         alert("in   the   button's   event   handler!");  
                        // event.cancelBubble   =   true;  
                   }  
              </script>       
              <input   type="button"   value="click   me"   onclick="clickMe()">

    posted @ 2007-06-20 10:44 落落 閱讀(246) | 評論 (0)編輯 收藏

    2007年6月14日

        感覺很有必要參考的,就轉發過來了:

    unsigned int
    auto_increment 自動增長
    not null  非空
    tinyint(m)
    float(m,n) m 總長 n 小數點后的位數
    mysqld --console 開始
    Mysqld (start)
    Mysqld-nt
    CREATE DATABASE db_name 創建數據庫
    USE db_name(選取數據庫)
    Mysql 管理
    mysqladmin
    Show databases 查看

    mysql -h(hostname) -u(username) -p(要求輸入密碼的)
    quit 退出

    1、show tables

    2、mysqladmin shutdown 關閉

    3、mysql --h=hostname --u=username --p

    4、DROP DATABASE db_name  刪除

    5、DROP TABLE 表的名字   

    6、CREATE TABLE 表的名字 SELECT (要選擇的列) FROM 原來的表 WHERE condition;

    7、CREATE TABLE new_table SELECT id,name,sex FROM

    8、INSERT INTO 表的名字 VALUES 跟的值(‘列的值’,‘列的值’);

    9、drop database name(數據庫的名字) 刪除數據庫
    10、CREATE TABLE name (id int,name varchar(20),sex ENUM('male','female'))創建表

    11、DESCRIBE TABLE(表的名字)

    12、ALTER TABLE name(表的名字)ADD PRIMARY KEY (index_col_name); 建表的主鍵

    13、ALTER TABLE name(表的名字)MODIFY id int(11) unsuptaigned(非負) not null(非空) auto_intcrement(自動增長);

    14、select * from 表的名字;

        SELECT Name, Population FROM City ORDER BY Population DESC LIMIT 5;

    15、update 表的名字 set 列的名字='數據' where id=號碼; 修改和增加數據

    16、ALTER TABLE 表的名字 ADD 列名 類型 ; 增加一個列

    17、LOAD DATA INFILE ‘路徑,文件名’INTO TABLE 表名;    導入數據

    修改記錄:UPDATE table_name SET column_name_1=column_value_1[,column_name2=column_value2] [WHERE where_statement] [LIMIT n];
    例: UPDATE xscj SET YuWen=80 WHERE id=101 (int型不要‘’,char 型要’‘)
    刪除記錄:DELETE FROM table_name [WHERE where_statements][LIMIT n];
    DELETE FROM xscj WHERE id=101;
    CREATE TABLE 表的名字 SELECT 要選擇的列或* FROM 原表名 WHERE id=..(只提取一條記錄)默認為全部
    INSERT INTO 表名 VALUES (與表對應的數值);插入多個值(),()SELECT * FROM 表名;
    有些關鍵字可以用``標起來   例如:`all`

    18、創建索引:
    CREATE TABLE 表名 (id init,name varchar(20)) INDEX idx_id(id) PRIMARY KEY id
    CREATE INDEX part_of_name ON customer (name(10));

    19、ALTER TABLE 表名 ADD INDEX idx_id (id,name); 修改索引;

    20、ALTER TABLE 表名 DROP INDEX idx_id(索引的名字) 刪除索引

    order by (DESC(降序)) 排序

    select TOP 3(前三行) student_id,name from xscj where student_id between 123 AND 1323 order by students_id ,name desc
    SELECT student_id , count(*) AS ss FROM xscj GROUP BY student_id;
    count(*) 記錄行數
    ab[123].com=ab1.com or ab2.com or ab3.com
    mysql mytest < c:\study.txt  導入文件

    臨時表
    可用CREATE TEMPORARY TABLE 來創建臨時表,這些表在會話結束時會自動消失。使用臨時表很方便,
    因為不必費心發布DROP TABLE 語句明確地刪除這些表,而且如果您的會話不正常結束,這些表不會滯留
    。例如,如果某個文件中有一個用mysql運行的查詢,您決定不等到其結束,那么可以在其執行的中途停
    止這個查詢,而且毫無問題,服務器將刪除所創建的任意臨時表。在舊版的MySQL中,沒有真正的臨時表
    ,除了您在自己的頭腦中認為它們是臨時的除外。對于需要這樣的表的應用程序,必須自己記住刪除這些
    表。如果忘了刪除,或在前面使其存在的客戶機中出現錯誤時,這些表在有人注意到并刪除它們以前會一
    直存在。臨時表僅對創建該表的客戶機可見。

    DROP TABLE tb1_name1,tb1_name2,......
    ? ? 其次,如果不能肯定一個表是否存在,但希望如果它存
    在就刪除它。那么可在此語句中增加IF EXISTS。

    SELECT a,b,a+b INTO OUTFILE 'c:/result.text' FIELDS TERMINATED BY "" LINES TERMINATED BY "\n" FROM test_table;
    SELECT user,MAX(salary) AS sum FROM users group by user HAVING sum>10 LIMIT 95,-1(95到最后);
    @c:\study.sql 可以查看系統
     
    SELECT * FROM table1 USE INDEX (key1,key2) WHERE key1=1 AND key2=2 AND key3=3;
     主鍵與負鍵的聯系用 references

    mysql數據庫的授權
       mysql>grant select,insert,delete,create,drop
       on *.* (或test.*/user.*/..)
       to 用戶名@localhost
       identified by 密碼;
       如:新建一個用戶帳號以便可以訪問數據庫,需要進行如下操作:
       mysql> grant usage(沒有權限)
       -> ON test.*
       -> TO testuser@localhost;
       Query OK, 0 rows affected (0.15 sec)
       此后就創建了一個新用戶叫:testuser,這個用戶只能從localhost連接到數據庫并可以連接到test 數據庫。下一步,我們必須指定testuser這個用戶可以執行哪些操作:
       mysql> GRANT select, insert, delete,update
       -> ON test.*
       -> TO testuser@localhost;
       Query OK, 0 rows affected (0.00 sec)
       此操作使testuser能夠在每一個test數據庫中的表執行SELECT,INSERT和DELETE以及UPDATE查詢操作。現在我們結束操作并退出MySQL客戶程序:
       mysql> exit
       Bye
        
         登陸:mysql -u  用戶名 -p
         刪除用戶 delete from user where user='名字1' [or user='名字2'];
         user 數據庫是系統的
     
    運行腳本:
    修改密碼:
    USE mysql;
    UPDATE user SET Password(字段名)=PASSWORD(一個函數)('new_password') WHERE user='root'

    FLUSH PRIVILEGES;(你必須告訴服務器再次讀入授權表)

    Mysqldump 數據庫備份
    mysqldump -u -p 數據庫名[表名]>(重定向)
    mysqldump                     <

    posted @ 2007-06-14 16:36 落落 閱讀(672) | 評論 (0)編輯 收藏

    2007年6月8日

    在數據庫應用中,經常要涉及從兩個或更多的表中查詢數據,這就需要使用連接查詢。
                  其格式如下:
                  SELECT COLUMN_NAME,C O L U M N _ N A M E [ , . . . n ]
                  FROM TA B L E _ N A M E,TA B L E _ N A M E [ , . . . n ]
                  WHERE TABLE_NAME.COLUMN_NAME JOIN_OPERATOR TA B L E _ N A M E . C O L U M N _ N A M E
                 上述的連接操作符(J O I N _ O P E R ATO R)可以是:=、>、<、> =、< =、! =、< >、! >、! <、= *、* =。
                 在A N S I中,“=”連接應該寫成Inner Join;“* =”連接應該寫成LEFT OUT JOIN;“= *”連接應該寫成“ RIGHT OUT JOIN”。
                在SQL SERVER中,這些寫法都可以用。但是,A N S I規定的寫法是INNER JOIN等標志。一般而言,在任何連接中,都使用“主鍵=外鍵”的連接查詢條件。
    ---------------------------------------------------------------------------------

                非限制連接(CROSS JOIN),就是指不帶W H E R E子句的查詢。在數學上,就是表的笛卡爾積。若R表和S表非限制連接,而且R表有X行,S表有Y行,那么結果集是X * Y行。即:R表的一行對應著S表的所有行。在應用中,非限制連接產生的是無意義結果集,但在數據庫的數學模式上有重要的作用。
    -------------------------------------------------------------------------
                自然連接(INNER JOIN)也叫內連接。我們先看下面的例子:

                SELECT PUB_NAME,TITLE
                FROM TITLES,PUBLISHERS
                WHERE TITLES.PUB_ID=PUBLISHERS.PUB_ID
                或寫成:
                SELECT PUB_NAME,TITLE
                FROM TITLES INNER JOIN PUBLISHERS
                ON TITLES.PUB_ID=PUBLISHERS.PUB_ID
                其中,INNER JOIN是SQL Server的缺省連接,可簡寫為J O I N。在J O I N后面指定哪些表作連接。O N后面指定了連接的條件。
                以上操作的過程如下:
                     1) 從T I T L E S表中取出一條符合其條件的記錄。
                     2) 掃描P U B L I S H E R S表,分別檢查每條記錄是否在連接屬性上同表T I T L E S取出的記錄相
                     3) 相等就顯示信息。繼續從表T I T L E S中取下一條記錄,重復步驟2。其實,兩個或多個表要做連接,那么這些表之間必然存在著主鍵和外鍵的關系。所以,只需要將這些鍵的關系列出,就可以得出表連接的結果。如上例中, P U B _ I D是P U B L I S H E R S表的主鍵, P U B_ I D又是TI T L E S表的外鍵,參照P U B L I S H E R S表中的P U B _ I D .所以,這兩個表的連接條件就是T I T L E S.PUB_ID=PUBLISHERS. PUB_ID。
    -----------------------------------------------------------------------
                外連接(OUTER JOIN)允許限制一張表中的行,而不限制另一張表中的行。
                下面舉兩個例子來說明外連接的用法。請比較這兩個例子。
                例顯示所有的書名(無銷售記錄的書也包括在內,“*”在左邊表示不限制左邊表的數
                SELECT TITLES.TITLE_ID,title=convert(char(38),TITLE),QTY
                FROM TITLES,SALES
                WHERE TITLES.TITLE_ID *= SALES.TITLE_ID
                或寫為:
                SELECT TITLES.TITLE_ID,title=convert(char(38),TITLE),QTY
                FROM TITLES LEFT OUTER JOIN SALES
                ON TITLES.TITLE_ID = SALES.TITLE_ID

                外連接的方法有兩種:
                • A *= B 包括第一張表A的所有行在內,而不考慮語句限制(如: A . t i t l e _ i d = B . t i t l e _ i d)。
                相當于LEFT OUT JOIN。
                • A =* B 包括第二張表B的所有行在內,而不考慮語句限制(如: A . t i t l e _ i d = B . t i t l e _ i d)。
                相當于RIGHT OUT JOIN。
                創建外連接規則:
                     1) 外連接顯示外部表中的所有行,包括與相關表不相配的行在內。
                     2) 外連接只能在兩張表之間進行。
                     3) 不能在內部表上使用IS NULL檢索條件。

    posted @ 2007-06-08 18:12 落落 閱讀(2065) | 評論 (0)編輯 收藏

    初學webwork,遇到此異常

    嚴重: Servlet.service() for servlet webwork threw exception
    java.lang.NoClassDefFoundError: com/uwyn/rife/continuations/ContinuationConfig
    at com.opensymphony.webwork.dispatcher.mapper.ActionMapperFactory.getMapper(ActionMapperFactory.java:32)
    at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:93)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:834)
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
    at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
    at java.lang.Thread.run(Thread.java:595)

    剛開始以為是配置問題,后來把所有的jar包導進去,ok了,經查看少包:rrife-continuations.jar

    posted @ 2007-06-08 18:11 落落 閱讀(597) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲成a人片77777老司机| 亚洲欧美日韩中文二区 | 91高清免费国产自产拍2021| 亚洲国产成人精品青青草原| 国产精品自在自线免费观看| 中文字幕永久免费视频| 亚洲中文字幕久久精品无码2021| 成人亚洲综合天堂| 91免费国产精品| 特级毛片A级毛片100免费播放| 亚洲AV综合色区无码一区爱AV| 日韩欧美一区二区三区免费观看| 成年网站免费入口在线观看| 久久精品国产亚洲av影院| 国产成人aaa在线视频免费观看| 久久大香香蕉国产免费网站| 色综合久久精品亚洲国产| 亚洲综合一区二区国产精品| 成人亚洲综合天堂| 免费看男女下面日出水来| 一级黄色免费大片| 久久久国产亚洲精品| 亚洲处破女AV日韩精品| 免费v片在线观看| 国产91色综合久久免费分享| 中文字幕免费播放| 久久精品国产精品亚洲毛片| 成人免费视频小说| 亚洲精品动漫在线| 免费国产成人午夜电影| 18禁止看的免费污网站| 国产成人AV免费观看| 黄色一级毛片免费| 亚洲国产系列一区二区三区| 久久亚洲AV无码精品色午夜麻| 亚洲免费在线观看| 四虎永久成人免费| 精品免费国产一区二区三区| 57PAO成人国产永久免费视频| 久久这里只精品99re免费| 中文字幕成人免费高清在线视频|