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

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

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

    Rising Sun

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      148 隨筆 :: 0 文章 :: 22 評論 :: 0 Trackbacks

    2015年1月7日 #

         摘要: 看了網(wǎng)上的許多對于lucene 分詞解析的文章一知半解且代碼比較老舊,為透徹、系統(tǒng)、全面、深刻的了解分詞是怎么一個(gè)過程,通過自定義一個(gè)分詞器來分析理解。 其中分詞部分利用ICTCLAS4j接口實(shí)現(xiàn)。結(jié)構(gòu)如下所示:            要實(shí)現(xiàn)自定義的ICTCLAS4jAnalyzer必須繼承Analy...  閱讀全文
    posted @ 2015-01-07 10:11 brock 閱讀(1098) | 評論 (0)編輯 收藏

    Lucene Directory類就像它的意思一樣“目錄”,如“目錄”不存在,第一次啟動被創(chuàng)建,一旦文件被創(chuàng)建,它只能打開閱讀,或刪除。允許讀取和寫入隨機(jī)訪問。Java I/O api 不能直接使用,只能通過這個(gè)API Directory的實(shí)現(xiàn)類可以分為文件目錄,內(nèi)存目錄和目錄的代理類及工具類。具體如下圖所示:


    一:文件目錄

    SimpleFSDirectory:FSDirectory的簡單實(shí)現(xiàn),并發(fā)能力有限,遇到多線程讀同一個(gè)文件時(shí)會遇到瓶頸,通常用NIOFSDirectoryMMapDirectory代替。

    NIOFSDirectory:通過java.nio's FileChannel實(shí)行定位讀取,支持多線程讀(默認(rèn)情況下是線程安全的)。該類僅使用FileChannel進(jìn)行讀操作,寫操作則是通過FSIndexOutput實(shí)現(xiàn)。

    注意:NIOFSDirectory 不適用于Windows系統(tǒng),另外如果一個(gè)訪問該類的線程,在IO阻塞時(shí)被interruptcancel,將會導(dǎo)致底層的文件描述符被關(guān)閉,后續(xù)的線程再次訪問NIOFSDirectory時(shí)將會出現(xiàn)ClosedChannelException異常,此種情況應(yīng)用SimpleFSDirectory代替。

    MMapDirectory:通過內(nèi)存映射進(jìn)行讀,通過FSIndexOutput進(jìn)行寫的FSDirectory實(shí)現(xiàn)類。使用該類時(shí)要保證用足夠的虛擬地址空間。另外當(dāng)通過IndexInputclose方法進(jìn)行關(guān)閉時(shí)并不會立即關(guān)閉底層的文件句柄,只有GC進(jìn)行資源回收時(shí)才會關(guān)閉。

     

    為了能適應(yīng)各個(gè)操作系統(tǒng)選擇最佳Directory方案,lucene 提供FSDirectory類的靜態(tài)方法open()實(shí)現(xiàn)自適應(yīng)。

     public static FSDirectory open(File path, LockFactory lockFactory) throws IOException {

        if ((Constants.WINDOWS || Constants.SUN_OS || Constants.LINUX)

              && Constants.JRE_IS_64BIT && MMapDirectory.UNMAP_SUPPORTED) {

          return new MMapDirectory(path, lockFactory);

        } else if (Constants.WINDOWS) {

          return new SimpleFSDirectory(path, lockFactory);

        } else {

          return new NIOFSDirectory(path, lockFactory);

        }

      }

    二:內(nèi)存目錄

    RAMDirectory:常駐內(nèi)存的Directory實(shí)現(xiàn)方式。默認(rèn)通過SingleInstanceLockFactory(單實(shí)例鎖工廠)進(jìn)行鎖的實(shí)現(xiàn)。該類不適合大量索引的情況另外也不適用于多線程的情況 在索引數(shù)據(jù)量大的情況下建議使用MMapDirectory代替。RAMDirectoryDirectory抽象類在使用內(nèi)存最為文件存儲的實(shí)現(xiàn)類,其主要是將所有的索引文件保存到內(nèi)存中。這樣可以提高效率。但是如果索引文件過大的話,則會導(dǎo)致內(nèi)存不足,因此,小型的系統(tǒng)推薦使用,如果大型的,索引文件達(dá)到G級別上,推薦使用FSDirectory

    NRTCachingDirectory:是對RAMDirectory的封裝,適用于近乎時(shí)時(shí)(near-real-time)操作的環(huán)境。

    三:Direcotry的代理類及工具類

    FileSwitchDirectory:文件切換的Directory實(shí)現(xiàn).針對lucene的不同的索引文件使用不同的Directory .借助FileSwitchDirectory整合不同的Directory實(shí)現(xiàn)類的優(yōu)點(diǎn)于一身
    比如MMapDirectory,借助內(nèi)存映射文件方式提高性能,但又要減少內(nèi)存切換的可能 ,當(dāng)索引太大的時(shí)候,內(nèi)存映射也需要不斷地切換,這樣優(yōu)點(diǎn)也可能變?nèi)秉c(diǎn),而之前的NIOFSDirectory實(shí)現(xiàn)java NIO的方式提高高并發(fā)性能,但又因高并發(fā)也會導(dǎo)致IO過多的影響,所以這次可以借助FileSwitchDirectory發(fā)揮他們兩的優(yōu)點(diǎn)。

    RateLimitedDirectoryWrapper:通過IOContext來限制讀寫速率的Directory封裝類。

    CompoundFileDirectory:用于訪問一個(gè)組合的數(shù)據(jù)流。僅適用于讀操作。對于同一段內(nèi)擴(kuò)展名不同但文件名相同的所有文件合并到一個(gè)統(tǒng)一的.cfs文件和一個(gè)對應(yīng)的.cfe文件內(nèi)。
    .cfs文件由HeaderFileDataFileCount組成。.cfe文件由HeaderFileCount,FileName,DataOffset,DataLength組成。.cfs文件中存儲著索引的概要信息及組合文件
    的數(shù)目(FileCount)。.cfe文件存儲文件目錄的條目內(nèi)容,內(nèi)容中包括文件數(shù)據(jù)扇區(qū)的起始位置,文件的長度及文件的名稱。

    TrackingDirectoryWrapperDirectory的代理類。用于記錄哪些文件被寫入和刪除。

    四:Direcotry讀寫對象的類圖




     文章轉(zhuǎn)載過來的!

    posted @ 2015-01-07 10:09 brock 閱讀(273) | 評論 (0)編輯 收藏

    2015年1月6日 #

        本機(jī)已經(jīng)安裝了jdk1.6,而比較早期的項(xiàng)目需要依賴jdk1.5,于是同時(shí)在本機(jī)安裝了jdk1.5和jdk1.6. 

     安裝jdk1.5前,執(zhí)行java -version得到

    java version "1.6.0_38"
    Java(TM) SE Runtime Environment (build 1.6.0_38-b05)
    Java HotSpot(TM) 64-Bit Server VM (build 20.13-b02, mixed mode)


    安裝完jdk1.5,并修改環(huán)境變量JAVA_HOME為D:\devSoftware\jdk1.5.再執(zhí)行 java -version時(shí),依然顯示:

    java version "1.6.0_38"
    Java(TM) SE Runtime Environment (build 1.6.0_38-b05)
    Java HotSpot(TM) 64-Bit Server VM (build 20.13-b02, mixed mode)


    看上去,新的環(huán)境變量JAVA_HOME=D:\devSoftware\jdk1.5并沒有生效。 在網(wǎng)上找了很多資料才發(fā)現(xiàn):

          在安裝JDK1.6時(shí)(本機(jī)先安裝jdk1.6再安裝的jdk1.5),自動將java.exe、javaw.exe、javaws.exe三個(gè)可執(zhí)行文件復(fù)制到了C:\Windows\System32目錄,由于這個(gè)目錄在WINDOWS環(huán)境變量中的優(yōu)先級高于JAVA_HOME設(shè)置的環(huán)境變量優(yōu)先級


    解決方案:將java.exe,javaw.exe,javaws.exe刪除即可。開啟新的命令行窗口,再執(zhí)行java -version時(shí),就得到了期望中的結(jié)果

    java version "1.5.0_17"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_17-b04)
    Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_17-b04, mixed mode)


    posted @ 2015-01-06 11:45 brock 閱讀(7029) | 評論 (0)編輯 收藏

    2014年12月31日 #

    在學(xué)lucene 之初看了許多書,都是走馬觀花,沒有項(xiàng)目的驅(qū)動下,來一個(gè)用例demo感覺也不是很難,“我會了”這是我的第一感覺。

             2013年底公司接到一個(gè)項(xiàng)目用到lucene,這是我第一次正真接觸Lucene,代碼比較老3.6版本,不適合新項(xiàng)目的需求(空間查詢)。于是下載了最新版本 4.51,有帶“空間查詢”模塊。各大搜索引擎都沒有找到像樣例子,于是想到了lucene svn trunk目錄測試用例中找到了測試?yán)樱_始了一段lucene之旅。

     

    寫數(shù)據(jù),創(chuàng)建IndexWriter,通過它的構(gòu)造函數(shù)需要一個(gè)索引目錄(Diectory)和索引寫入配置項(xiàng)(InderWriterConfig,直接上代碼:

    //設(shè)置寫入目錄(好幾種呵呵)

    Directory d=FSDirectory.open(new File("D:/luceneTest"));

    //設(shè)置分詞 StandardAnalyzer(會把句子中的字單個(gè)分詞)

    Analyzer analyzer= new StandardAnalyzer(Version.LUCENE_45);

    //設(shè)置索引寫入配置

    IndexWriterConfig config=new IndexWriterConfig(Version.LUCENE_45,analyzer);

    //設(shè)置創(chuàng)建模式

    //config.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);

    IndexWriter indexwriter= new IndexWriter(d,config);

     

        上面四行代碼就創(chuàng)建好了indexwriter下面把數(shù)據(jù)填入就好了,寫入有多種方式如下圖:


             addDocment 舉例代碼如下:

    Document doc=new Document(); 

            doc.add(new StringField("id", "1", Store.YES));

            doc.add(new StringField("name", "brockhong", Store.YES));

            doc.add(new TextField("content", "lucene 文檔第一次寫看著給分吧", Store.YES)); 

    //寫入數(shù)據(jù)

    indexwriter.addDocument(doc);

    //提交

    indexwriter.commit();

    Luke 工具查看Text列,這是標(biāo)準(zhǔn)分詞惹的禍哦!寫入成功。


             讀數(shù)據(jù)查詢,創(chuàng)建 IndexSearcher 構(gòu)造函數(shù)設(shè)置indexReader ,輸入查詢條件,上面content字段數(shù)據(jù)設(shè)置了分詞,所以必須通過查詢解析類QueryParser設(shè)定分詞字段、版本、分詞模式,并通過parse方法得到查詢條件。代碼如下:       

     //讀數(shù)據(jù)

     //創(chuàng)建 indexReader 這個(gè)已過時(shí) IndexReader.open(d),里面的代碼一樣可能為了兼容老版本

     IndexReader indexReader = DirectoryReader.open(d);

     IndexSearcher indexSearcher = new IndexSearcher(indexReader);

    //查詢 設(shè)置分詞字段

    QueryParser queryParser = new QueryParser(Version.LUCENE_45, "content",

                       new StandardAnalyzer(Version.LUCENE_45));

     //or 關(guān)系 “給”、“分”

             queryParser.setDefaultOperator(QueryParser.OR_OPERATOR);

    Query query = queryParser.parse("給分");

     

    TopDocs results = indexSearcher.search(query, 100);

    int numTotalHits = results.totalHits;

    System.out.println(" " + numTotalHits + " 完全匹配的文檔");

    ScoreDoc[] hits = results.scoreDocs;

    for (int i = 0; i < hits.length; i++) {

                  Document document = indexSearcher.doc(hits[i].doc);

                  System.out.println("content:" + document.get("content"));

    }


    pasting
    posted @ 2014-12-31 17:07 brock 閱讀(332) | 評論 (0)編輯 收藏

    2014年9月2日 #

    http://blog.csdn.net/ablipan/article/details/8198692

    使用SAXReader的read(File file)方法時(shí),如果xml文件異常會導(dǎo)致文件被服務(wù)器占用不能移動文件,建議不使用read(File file)方法而使用read(FileInputStream fis)等流的方式讀取文件,異常時(shí)關(guān)閉流,這樣就不會造成流未關(guān)閉,文件被鎖的現(xiàn)象了。(在服務(wù)器中運(yùn)行時(shí)會鎖住文件,main方法卻不會)。


    1、以下方式xml文件異常時(shí)會導(dǎo)致文件被鎖

    1.                    Document document = null;  
    2. File file = new File(xmlFilePath);  
    3. SAXReader saxReader = new SAXReader();  
    4. try  
    5. {  
    6.     document = saxReader.read(file);  
    7. } catch (DocumentException e)  
    8. {  
    9.     logger.error("將文件[" + xmlFilePath + "]轉(zhuǎn)換成Document異常", e);  
    10. }  


    2、以下方式xml文件異常時(shí)不會鎖文件(也可以使用其他的流來讀文件)

    1.                 Document document = null;  
    2. FileInputStream fis = null;  
    3. try  
    4. {  
    5.     fis = new FileInputStream(xmlFilePath);  
    6.     SAXReader reader = new SAXReader();  
    7.     document = reader.read(fis);  
    8. }   
    9. catch (Exception e)  
    10. {  
    11.     logger.error("將文件[" + xmlFilePath + "]轉(zhuǎn)換成Document異常", e);  
    12. }   
    13. finally  
    14. {  
    15.     if(fis != null)  
    16.     {  
    17.         try  
    18.         {  
    19.             fis.close();  
    20.         } catch (IOException e)  
    21.         {  
    22.             logger.error("將文件[" + xmlFilePath + "]轉(zhuǎn)換成Document,輸入流關(guān)閉異常", e);  
    23.         }  
    24.     }  
    25. }  
    posted @ 2014-09-02 14:00 brock 閱讀(485) | 評論 (0)編輯 收藏

    2014年6月24日 #

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>二次開發(fā)示例</title>
    <link rel="stylesheet" href="../OpenLayers2.11/theme/default/style.css" type="text/css" />
        <script type="text/javascript" src="../OpenLayers2.11/OpenLayers.js"></script>
        <script type="text/javascript" src="../OpenLayers2.11/OpenLayersEx.js?random=8852c822-1ab8-4c0a-9717-b6f4c2b98115"></script>
     
        <!-- Import OpenLayers, reduced, wms read only version -->
        <!--<script src="../OpenLayers.js" type="text/javascript"></script>-->
    <script type="text/javascript">
       var map;
    var bounds = new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34);
    function init() {
        var options = {
                           controls:[new OpenLayers.Control.XPanZoomBar(),new OpenLayers.Control.Navigation(),new OpenLayers.Control.MousePosition({numDigits:2})] ,
                            projection: 'EPSG:900913',
                            maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
                            maxResolution: 156543.0339,
                            units: 'm',
                            zoomLevel: 8
                        };
        map = new OpenLayers.Map('map',options);    
        
    /*{
            div: "map",
            projection: "EPSG:900913",
            units: "m",
            maxExtent: new OpenLayers.Bounds(
                -20037508.34, -20037508.34, 20037508.34, 20037508.34
            ),
            maxResolution: 156543.0339,
    zoomLevel: 8
        }*/
       // var osm = new OpenLayers.Layer.OSM();
        // If tile matrix identifiers differ from zoom levels (0, 1, 2, ...)
        // then they must be explicitly provided.
        var matrixIds = new Array(19);
        for (var i=0; i<16; ++i) {
            matrixIds[i] = i+"";
        }
    var wmts2 = new OpenLayers.Layer.WMTS({
            name: "Medford Buildings",
            url: "http://t0.tianditu.com/cia_w/wmts",
            layer: "cia",
            matrixSet: "w",
            matrixIds: matrixIds,
            format: "tiles",
            style: "default",
            opacity: 0.7,
            isBaseLayer: false
        });       
        var wmts = new OpenLayers.Layer.WMTS({
            name: "vec",
            url: "http://t0.tianditu.com/vec_w/wmts",
            layer: "vec",
            matrixSet: "w",
            matrixIds: matrixIds,
            format: "tiles",
            style: "default",
            opacity:1,
            isBaseLayer: true
        });                
        map.addLayers( [wmts,wmts2]);
      //  map.addControl(new OpenLayers.Control.LayerSwitcher());
      //  map.setCenter(new OpenLayers.LonLat(13391734.740566667,3535411.228859166),7);
    map.moveTo(new OpenLayers.LonLat(13391734.740566667,3535411.228859166),7);
    }
    </script>
    </head>
     <body onload="init();">
            <h1 id="title">Web Map Tile Service (WMTS) Layer</h1>
            
        
            
            <div id="map" class="smallmap"></div>
            
           
        </body>
    </html>
    posted @ 2014-06-24 17:00 brock 閱讀(832) | 評論 (0)編輯 收藏

    2014年6月20日 #

    arcgis

    CGCS2000_3_Degree_GK_Zone_40

    WKID: 4528 Authority: EPSG

     

    Projection: Gauss_Kruger

    False_Easting: 40500000.0

    False_Northing: 0.0

    Central_Meridian: 120.0

    Scale_Factor: 1.0

    Latitude_Of_Origin: 0.0

    Linear Unit: Meter (1.0)

     

    Geographic Coordinate System: GCS_China_Geodetic_Coordinate_System_2000

    Angular Unit: Degree (0.0174532925199433)

    Prime Meridian: Greenwich (0.0)

    Datum: D_China_2000

      Spheroid: CGCS2000

        Semimajor Axis: 6378137.0

        Semiminor Axis: 6356752.314140356

    Inverse Flattening: 298.257222101

     

    Java 自定義

     

    String [] proj4_w = new String [] { 

    "+proj=tmerc", 
    "+lat_0=0", 
    "+lon_0=120", 
    "+ellps=GRS80", 
    "+units=m", 
    "+x_0=40500000",
    "+y_0=0",
    "+k=1.0"
    };

    經(jīng)緯度轉(zhuǎn)換

           ///+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=GRS80 +units=m +no_defs

                    Point2D.Double srcProjec = null;

                    Point2D.Double dstProjec = null;

                    Projection proj = ProjectionFactory.fromPROJ4Specification (proj4_w);

    //  "epsg:4528" 數(shù)據(jù)從proj4 拷貝 nad

    //      Point2D.Double srcProjec = null;

    //      Point2D.Double dstProjec = null;

    //      Projection proj = ProjectionFactory.getNamedPROJ4CoordinateSystem ("epsg:4528");

     

            srcProjec = new Point2D.Double (120.159,30.267);

            //40515348.2903 3349745.5395

           

            dstProjec = proj.transform (srcProjec, new Point2D.Double ());

            System.out.println ("TM:" + dstProjec);

        // TM: Point2D.Double [644904.399587292, 400717.8948938238]

     

            srcProjec = new Point2D.Double (40515348.2903 ,3349745.5395);

            dstProjec = proj.inverseTransform (srcProjec, new Point2D.Double ());

           

            System.out.println ("TM:" + dstProjec);

    posted @ 2014-06-20 11:41 brock 閱讀(3725) | 評論 (0)編輯 收藏

    2014年4月30日 #

    今天研究Oracle遇到了這個(gè)問題ora-01033:oracle initializationor shutdown in progress

    ORA-01033:ORACLEinitialization or shutdown in progress

    解決方法

    1)開始-運(yùn)行-cmd

    2)命令行中輸入SQLPLUS SYS/SYS AS SYSDBA

    3)輸入SHUTDOWN

    4)輸入STARTUP.注意這里是最重要的地方,在顯示相關(guān)數(shù)據(jù)后,它還會顯示為什么不能啟動的錯(cuò)誤所在.

     

    C:\Users\lenovo>SQLPLUSSYS/SYS AS SYSDBA

    SQL*Plus: Release 10.2.0.3.0 - Production on星期三 7月 3 11:43:32 2013

    Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

    連接到:

    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 -Production

    With the Partitioning, OLAPand Data Mining options

    SQL> SHUTDOWN

    ORA-01109:數(shù)據(jù)庫未打開

    已經(jīng)卸載數(shù)據(jù)庫。

    ORACLE例程已經(jīng)關(guān)閉。

    SQL> STARTUP

    ORACLE例程已經(jīng)啟動。

    Total System Global Area 293601280 bytes

    Fixed Size                 1290208 bytes

    Variable Size            234881056 bytes

    Database Buffers           50331648 bytes

    Redo Buffers               7098368 bytes

    數(shù)據(jù)庫裝載完畢。

    ORA-01157:無法標(biāo)識/鎖定數(shù)據(jù)文件 6 - 請參閱 DBWR 跟蹤文件

    ORA-01110:數(shù)據(jù)文件 6: 'F:\DC\DB\SDRS\TS_SDRS.DBF'

    SQL> alter databasedatafile'F:\DC\DB\SDRS\TS_SDRS.DBF'offline drop;

     

    數(shù)據(jù)庫已更改。

     

    SQL> alter database open;

     

    數(shù)據(jù)庫已更改。

     

    SQL> drop tablespaceTS_SDRS including contents;

     

    表空間已刪除。

    SQL> create undo tablespace TS_SDRS

      2  datafile'CracleoradatasmsdbUNDOTBS01.DBF'size 2048M extent management local;

     

    表空間已創(chuàng)建。

     

    SQL> alter system setundo_tablespace=TS_SDRS;

     

    系統(tǒng)已更改。

     

    SQL> shutdown

    數(shù)據(jù)庫已經(jīng)關(guān)閉。

    已經(jīng)卸載數(shù)據(jù)庫。

    ORACLE例程已經(jīng)關(guān)閉。

    SQL> startup

    ORACLE例程已經(jīng)啟動。

     

    Total System Global Area  293601280 bytes

    Fixed Size                 1290208 bytes

    Variable Size            243269664 bytes

    Database Buffers          41943040 bytes

    Redo Buffers               7098368 bytes

    數(shù)據(jù)庫裝載完畢。

    數(shù)據(jù)庫已經(jīng)打開。

    SQL>


    ------------------
    ORA-01245、ORA-01547錯(cuò)誤的解決            

    數(shù)據(jù)庫rman restore database 之后,執(zhí)行recover database的時(shí)候,報(bào)告ORA-01245錯(cuò)誤,詳細(xì)的錯(cuò)誤信息如下:


    SQL> recover database until cancel;
    ORA-00279: change 575876 generated at 12/01/2009 08:19:49 needed for thread 1
    ORA-00289: suggestion :
    /oracle/flash_recovery_area/ORCL/archivelog/2009_12_01/o1_mf_1_2_%u_.arc
    ORA-00280: change 575876 for thread 1 is in sequence #2


    Specify log: {=suggested | filename | AUTO | CANCEL}
    auto
    ORA-00308: cannot open archived log
    '/oracle/flash_recovery_area/ORCL/archivelog/2009_12_01/o1_mf_1_2_%u_.arc'
    ORA-27037: unable to obtain file status
    Linux Error: 2: No such file or directory
    Additional information: 3


    ORA-00308: cannot open archived log
    '/oracle/flash_recovery_area/ORCL/archivelog/2009_12_01/o1_mf_1_2_%u_.arc'
    ORA-27037: unable to obtain file status
    Linux Error: 2: No such file or directory
    Additional information: 3


    ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
    ORA-01245: offline file 2 will be lost if RESETLOGS is done
    ORA-01110: data file 2: '/oracle/oradata/orcl/undotbs01.dbf'


    SQL>

     

    [@more@]

    檢查ORA-01245那一行,發(fā)現(xiàn)是datafile 2狀態(tài)為offline,解決的方法就是首先將datafile 2 online,然后再recover database。

    SQL> alter database datafile 2 online;

    Database altered.

    SQL> recover database until cancel;
    ORA-00279: change 575876 generated at 12/01/2009 08:19:49 needed for thread 1
    ORA-00289: suggestion :
    /oracle/flash_recovery_area/ORCL/archivelog/2009_12_01/o1_mf_1_2_%u_.arc
    ORA-00280: change 575876 for thread 1 is in sequence #2


    Specify log: {=suggested | filename | AUTO | CANCEL}
    cancel
    Media recovery cancelled.
    SQL> alter database open resetlogs;

    Database altered.

    SQL>

    --------------------

    ORA-01589: 要打開數(shù)據(jù)庫則必須使用 RESETLOGS 或 NOR


    ORA-01589: 要打開數(shù)據(jù)庫則必須使用 RESETLOGS 或 NORESETLOGS
    選項(xiàng)


    SQL> alter database open 
    ORA-01589: 要打開數(shù)據(jù)庫則必須使用 RESETLOGS 或
    NORESETLOGS 選項(xiàng)

    SQL> alter database open resetlogs;
    alter database
    open resetlogs
    *
    ERROR 位于第 1 行:
    ORA-01113: 文件 1 需要介質(zhì)恢復(fù)
    ORA-01110:
    數(shù)據(jù)文件 1: 'E:\ORACLE\ORADATA\EYGLE\SYSTEM01.DBF'

    SQL> recover database
    using backup controlfile;
    ORA-00279: 更改 1670743 (在 04/17/2008 14:13:16 生成)
    對于線程 1 是必需的
    ORA-00289: 建議: E:\ORACLE\ORA92\RDBMS\ARC00030.001
    ORA-00280:
    更改 1670743 對于線程 1 是按序列 # 30 進(jìn)行的

    指定日志: {<RET>=suggested | filename |
    AUTO | CANCEL}
    E:\oracle\oradata\EYGLE\REDO01.LOG
    ORA-00310: 存檔日志包含序列
    29;要求序列 30
    ORA-00334: 歸檔日志:
    'E:\ORACLE\ORADATA\EYGLE\REDO01.LOG'

    SQL> recover database using
    backup controlfile;
    ORA-00279: 更改 1670743 (在 04/17/2008 14:13:16 生成) 對于線程 1
    是必需的
    ORA-00289: 建議: E:\ORACLE\ORA92\RDBMS\ARC00030.001
    ORA-00280: 更改
    1670743 對于線程 1 是按序列 # 30 進(jìn)行的

    指定日志: {<RET>=suggested | filename |
    AUTO |
    CANCEL}
    E:\oracle\oradata\EYGLE\REDO02.LOG
    已應(yīng)用的日志。
    完成介質(zhì)恢復(fù)。
    SQL>
    alter database open resetlogs;
    數(shù)據(jù)庫已更改。


    OK,搞定了!

    posted @ 2014-04-30 14:38 brock 閱讀(9087) | 評論 (0)編輯 收藏

    2014年4月28日 #

    首先來看問題,然后來看函數(shù)的定義,其實(shí)什么都在函數(shù)定義里面說明白了

    1.正則表達(dá)式字符串問題

    首先輸入的regex是一個(gè)正則表達(dá)式,而不是一個(gè)普通的字符串,所以導(dǎo)致很多在正則表達(dá)式里面有特殊意義的比如 "." "|" "\" ,如果直接使用是不行的,另外一個(gè)方面我們輸入的regex是以字符串形式傳遞的,對有些字符必須要轉(zhuǎn)義,尤其是"\",下面請看例子

    String[] aa = "aaa|bbb|ccc".split("|");//wrong
    String[] aa = "aaa|bbb|ccc".split("\\|"); //

     

     String[] aa = "aaa*bbb*ccc".split("*");//wrong
     String[] aa = "aaa|bbb|ccc".split("\\*");

     

     String[] aa = "aaa*bbb*ccc".split(".");//wrong
     String[] aa = "aaa|bbb|ccc".split("\\.");

     

    String[] aa = "aaa\\bbb\\bccc".split("\\");//wrong

    String[] aa = "aaa\\bbb\\bccc".split("\\\\");

     

    2.數(shù)組長度的問題

    String a = "";
    String[] b = a.split(",");
    b.length為 1;
    *
    String a = "c";
    String[] b = a.split(",");
    b.length為 1;
    **
    String a = "c,,,";
    String[] b = a.split(",");
    b.length為 1;
    ***
    String a = "c,,c";
    String[] b = a.split(",");
    b.length為 3;
    ****
    String a = ",";
    String[] b = a.split(",");
    b.length為 0;

     

    其實(shí)只要添加一個(gè)參數(shù)即可,例如

    String str = "abcdef,ghijk,lmno,pqrst,,,";       

    String[] array = str.split(",");
    輸出:abcdef,ghijk,lmno,pqrst,

     

    String str = "abcdef,ghijk,lmno,pqrst,,,";
    String[] array 
    = str.split(",",-1);

    輸出:abcdef,ghijk,lmno,pqrst,,,,

     

    public String [] split (String  regex, int limit) 

    最后一個(gè)參數(shù)limit是影響返回?cái)?shù)組的長度的

    =========================請關(guān)注紅色字體(括號內(nèi)為注釋)==========================================

    public String[] split(String regex)

    根據(jù)給定的正則表達(dá)式的匹配來拆分此字符串。

    該方法的作用就像是使用給定的表達(dá)式和限制參數(shù) 0 來調(diào)用兩參數(shù) split 方法。因此,結(jié)果數(shù)組中不包括結(jié)尾空字符串(直接使用會造成數(shù)組大小問題)

    例如,字符串 "boo:and:foo" 產(chǎn)生帶有下面這些表達(dá)式的結(jié)果:

    Regex結(jié)果
    :{ "boo", "and", "foo" }
    o{ "b", "", ":and:f" }

     

    參數(shù):
    regex - 定界正則表達(dá)式
    返回:
    字符串?dāng)?shù)組,根據(jù)給定正則表達(dá)式的匹配來拆分此字符串,從而生成此數(shù)組。

    public String[] split(String regex,
                          int limit)

    根據(jù)匹配給定的正則表達(dá)式來拆分此字符串。

    此方法返回的數(shù)組包含此字符串的每個(gè)子字符串,這些子字符串由另一個(gè)匹配給定的表達(dá)式的子字符串終止或由字符串結(jié)束來終止。數(shù)組中的子字符串按它們在此字符串中的順序排列。如果表達(dá)式不匹配輸入的任何部分,則結(jié)果數(shù)組只具有一個(gè)元素,即此字符串。

    limit 參數(shù)控制模式應(yīng)用的次數(shù),因此影響結(jié)果數(shù)組的長度如果該限制 n 大于 0,則模式將被最多應(yīng)用 n - 1 次,數(shù)組的長度將不會大于 n,而且數(shù)組的最后項(xiàng)將包含超出最后匹配的定界符的所有輸入。如果 n 為非正,則模式將被應(yīng)用盡可能多的次數(shù),而且數(shù)組可以是任意長度。如果 n 為零,則模式將被應(yīng)用盡可能多的次數(shù),數(shù)組可有任何長度,并且結(jié)尾空字符串將被丟棄

    例如,字符串 "boo:and:foo" 使用這些參數(shù)可生成下列結(jié)果:

    RegexLimit結(jié)果
    :2{ "boo", "and:foo" }
    :5{ "boo", "and", "foo" }
    :-2{ "boo", "and", "foo" }
    o5{ "b", "", ":and:f", "", "" }
    o-2{ "b", "", ":and:f", "", "" }
    o0{ "b", "", ":and:f" }

    這種形式的方法調(diào)用 str.split(regex, n) 產(chǎn)生與以下表達(dá)式完全相同的結(jié)果:

    Pattern.compile(regex).split(str, n)

     

    參數(shù):
    regex - 定界正則表達(dá)式
    limit - 結(jié)果閾值,如上所述
    返回:
    字符串?dāng)?shù)組,根據(jù)給定正則表達(dá)式的匹配來拆分此字符串,從而生成此數(shù)組

     

    posted @ 2014-04-28 10:15 brock 閱讀(247) | 評論 (0)編輯 收藏

    2014年1月8日 #

      List<Calendar> l = new ArrayList<Calendar>(); 
    while (true) {
    l.add(Calendar.getInstance());
    System.out.println(l.size());
    }
    605473
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Calendar.<init>(Unknown Source)
    at java.util.GregorianCalendar.<init>(Unknown Source)
    at java.util.Calendar.createCalendar(Unknown Source)
    at java.util.Calendar.getInstance(Unknown Source)
    at jodatestmemory.Main.main(Main.java:25)
    posted @ 2014-01-08 11:26 brock 閱讀(367) | 評論 (0)編輯 收藏

    僅列出標(biāo)題  下一頁
    主站蜘蛛池模板: 最新免费jlzzjlzz在线播放| 成年女人色毛片免费看| 中文字幕成人免费视频| 黄页网站免费观看| 日韩精品免费一区二区三区| 久久国产成人亚洲精品影院 | 久久久久亚洲av无码专区导航 | 精品国产sm捆绑最大网免费站| 国产免费看JIZZ视频| 国产91久久久久久久免费| 亚洲午夜久久久久久久久电影网| 亚洲人成电影福利在线播放| 亚洲人成电影网站久久| 一级毛片一级毛片免费毛片| 91av视频免费在线观看| 日韩一级免费视频| 久久亚洲高清观看| 亚洲国产综合精品中文第一| 亚洲精品视频免费观看| 国产成人免费高清激情明星| 免费一级毛片在级播放| 97亚洲熟妇自偷自拍另类图片| 亚洲日本久久一区二区va| 九九免费久久这里有精品23| 亚洲视频在线观看免费视频| 免费人成网站7777视频| 亚洲精品日韩专区silk| 特级aaaaaaaaa毛片免费视频| 99视频免费播放| 免费在线看片网站| 亚洲熟妇无码久久精品| 九九综合VA免费看| 国产精品69白浆在线观看免费| 久久亚洲国产成人影院网站 | 99热亚洲色精品国产88| 久草免费福利在线| 精品国产免费观看久久久| 亚洲AV成人一区二区三区AV| 羞羞视频免费观看| 美女网站免费福利视频| 亚洲αv在线精品糸列|