各類分頁

Stay hungery. Stay Foolish.
Oracle、DB二、SQLSERVER、Mysql、Access分頁SQL語句梳理
2010年9月16日 18:06javascript

Oracle、DB二、SQLSERVER、Mysql、Access分頁SQL語句梳理
最近把平時在項目中經常使用到的數據庫分頁sql總結了下。你們能夠貼出分頁更高效的sql語句。
sqlserver分頁
第一種分頁方法
需用到的參數:
pageSize 每頁顯示多少條數據
pageNumber 頁數 從客戶端傳來
totalRecouds 表中的總記錄數 select count (*) from 表名
totalPages 總頁數
totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1
pages 計算前pages 條數據
pages= pageSize*(pageNumber-1)
SQL語句:
select top pageSize * from 表名 where id not in (select top pages id from 表名 order by id) order by id
第二種分頁方法
pageSize 每頁顯示多少條數據
pageNumber 頁數 從客戶端傳來
pages=pageSize*(pageNumber-1)+1
select top pageSize * from 表名 where id>=(select max(id) from (select top pages id from 表名 order by id asc ) t )html

mysql分頁
需用到的參數:
pageSize 每頁顯示多少條數據
pageNumber 頁數 從客戶端傳來
totalRecouds 表中的總記錄數 select count (*) from 表名
totalPages 總頁數
totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1
pages 起始位置
pages= pageSize*(pageNumber-1)
SQL語句:
select * from 表名 limit pages, pageSize;
mysql 分頁依賴於關鍵字 limit 它需兩個參數:起始位置和pageSize
起始位置=頁大小*(頁數-1)
起始位置=pageSize*(pageNumber -1)java

oracle分頁
pageSize 每頁顯示多少條數據
pageNumber 頁數 從客戶端傳來
totalRecouds 表中的總記錄數 select count (*) from 表名
totalPages 總頁數
totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1
startPage 起始位置
startPage= pageSize*(pageNumber-1)+1
endPage=startPage+pageSize
SQL語句
select a.* from
(
select rownum num ,t.* from 表名 t where 某列=某值 order by id asc
)a
where a.num>=startPage and a.num<endPagemysql

db2分頁
int startPage=1 //起始頁
int endPage; //終止頁
int pageSize=5; //頁大小
int pageNumber=1 //請求頁git

startPage=(pageNumber-1)*pageSize+1
endPage=(startPage+pageSize);ajax


SQL語句
select * from (select 字段1,字段2,字段3,字段4,字段5,rownumber() over(order by 排序字段 asc ) as rowid from 表名 )as a where a.rowid >= startPage AND a.rowid <endPage正則表達式

access分頁
pageSize 每頁顯示多少條數據
pageNumber 頁數 從客戶端傳來
pages=pageSize*(pageNumber-1)+1
SQL語句
select top pageSize * from 表名 where id>=(select max(id) from (select top pages id from 表名 order by id asc ) t )算法

轉自http://www.blogjava.net/sxyx2008/archive/2010/09/16/332193.htmlspring


Charleehu 2010-09-16 18:06 發表評論
hibernate主鍵生成策略
2010年7月29日 10:59sql

Hibernate有不少值得學習的地方,這裏咱們主要介紹Hibernate主鍵,包括介紹Assigned方式、Increment方式和Foreign GUID等方面。

Hibernate主鍵介紹

1.Assigned

Assigned方式由程序生成主鍵值,而且要在save()以前指定不然會拋出異常

特色:主鍵的生成值徹底由用戶決定,與底層數據庫無關。用戶須要維護主鍵值,在調用session.save()以前要指定主鍵值。

2.Hilo

Hilo使用高低位算法生成主鍵,高低位算法使用一個高位值和一個低位值,而後把算法獲得的兩個值拼接起來做爲數據庫中的惟一主鍵。Hilo方式須要額外的數據庫表和字段提供高位值來源。默認請況下使用的表是

hibernate_unique_key,默認字段叫做next_hi。next_hi必須有一條記錄不然會出現錯誤。

特色:須要額外的數據庫表的支持,能保證同一個數據庫中主鍵的惟一性,但不能保證多個數據庫之間主鍵的惟一性。Hilo主鍵生成方式由Hibernate 維護,因此Hilo方式與底層數據庫無關,但不該該手動修改hi/lo算法使用的表的值,不然會引發主鍵重複的異常。

3.Increment

Increment方式對主鍵值採起自動增加的方式生成新的主鍵值,但要求底層數據庫的支持Sequence。如Oracle,DB2等。須要在映射文件xxx.hbm.xml中加入Increment標誌符的設置。

特色:由Hibernate自己維護,適用於全部的數據庫,不適合多進程併發更新數據庫,適合單一進程訪問數據庫。不能用於羣集環境。

4.Identity

Identity當時根據底層數據庫,來支持自動增加,不一樣的數據庫用不一樣的主鍵增加方式。

特色:與底層數據庫有關,要求數據庫支持Identity,如MySQl中是 auto_increment, SQL Server 中是Identity,支持的數據庫有MySql、SQL Server、DB二、Sybase和HypersonicSQL。 Identity無需Hibernate和用戶的干涉,使用較爲方便,但不便於在不一樣的數據庫之間移植程序。

5.Sequence

Sequence須要底層數據庫支持Sequence方式,例如Oracle數據庫等

特色:須要底層數據庫的支持序列,支持序列的數據庫有DB二、PostgreSql、Qracle、SAPDb等在不一樣數據庫之間移植程序,特別從支持序列的數據庫移植到不支持序列的數據庫須要修改配置文件

6.Native

Native主鍵生成方式會根據不一樣的底層數據庫自動選擇Identity、Sequence、Hilo主鍵生成方式。

特色:根據不一樣的底層數據庫採用不一樣的主鍵生成方式。因爲Hibernate會根據底層數據庫採用不一樣的映射方式,所以便於程序移植,項目中若是用到多個數據庫時,可使用這種方式。

7.UUID

UUID使用128位UUID算法生成主鍵,可以保證網絡環境下的主鍵惟一性,也就可以保證在不一樣數據庫及不一樣服務器下主鍵的惟一性。

特色;可以保證數據庫中的主鍵惟一性,生成的主鍵佔用比較多的存貯空間

8.Foreign GUID

Foreign用於一對一關係中。GUID主鍵生成方式使用了一種特殊算法,保證生成主鍵的惟一性,支持SQL Server和MySQL。以上介紹Hibernate主鍵。


Charleehu 2010-07-29 10:59 發表評論
Eclipse開源插件
2010年7月23日 15:31

一、EasyExplorer
EasyExplorer 是一個相似於 Windows Explorer的Eclipse插件,它能夠幫助你直接瀏覽本地文件系統。
下載地址:http://sourceforge.net/projects/easystruts/
相似的還有openexplorer等

二、FindBugs
靜態代碼掃描工具,能幫助你檢查代碼中的一些BUG。
下載地址:http://findbugs.sourceforge.net/

三、JSDT
JSDT(Javascript Debug Toolkit)是一個用於javascript調試的eclipse 插件,用於調試javascript。JSDT能夠跨瀏覽器調試,支持在IE,Firefox,Safari,Chrome等主流瀏覽器中調試 javascript。JSDT支持設置斷點,單步調試等調試工具的基本特性。
下載地址:http://code.google.com/p/jsdt/
使用介紹:http://www.blogjava.net/xmatthew/archive/2008/11/10/239727.html

四、HibernateTools
經過數據庫生成POJO和HBM映射文件,屬於JBoss Tools系列.
下載地址:http://jboss.org/tools/download.html
使用介紹:http://smartcai.spaces.live.com/blog/cns!5E38E5D69C4C0678!229.trak

五、Metrics
一個十分強大的分析工具,主要分析代碼的複雜性。同時能夠統計如包的依賴性、代碼的有效行數、方法的有效行數、包的數量、屬性的數量等等。
下載地址:http://metrics.sourceforge.net/

六、Hibernate Synchronizer

一款Eclipse的插件,用於自動生成Hibernate的映射文件,主要特色包括:

1,支持從數據庫直接生成映射文件
2,能從hbm文件自動生成/同步更新Entity
3,支持veclocity模板,能夠配置veclocity控制代碼生成
4,還附帶一個XML編輯器,支持HBM代碼自動補全
項目主頁 : http://hibernatesynch.sourceforge.net/


Charleehu 2010-07-23 15:31 發表評論
Oracle JDBC URL
2010年1月25日 17:35

jdbc:oracle:driver_type:[username/password]@database_specifier

driver_type有thin和oci

eg.
jdbc:oracle:thin:@localhost:1521:xe


Charleehu 2010-01-25 17:35 發表評論
XMLHttpRequest().readyState的五種狀態詳解(轉)
2009年11月1日 13:03
轉 http://javathinker.blog.ccidnet.com/blog-htm-itemid-1262479-do-showone-type-blog-uid-36384.html

在《Pragmatic AJAX中文問題 A Web 2.0 Primer 》中偶然看到對readyStae狀態的介紹,感受這個介紹很實在,摘譯以下:

0: (Uninitialized) the send( ) method has not yet been invoked.
1: (Loading) the send( ) method has been invoked, request in progress.
2: (Loaded) the send( ) method has completed, entire response received.
3: (Interactive) the response is being parsed.
4: (Completed) the response has been parsed, is ready for harvesting.

0 - (未初始化)尚未調用send()方法
1 - (載入)已調用send()方法,正在發送請求
2 - (載入完成)send()方法執行完成,已經接收到所有響應內容
3 - (交互)正在解析響應內容
4 - (完成)響應內容解析完成,能夠在客戶端調用了

對於readyState的這五種狀態,其餘書中大都語焉不詳。像《Foundations of AJAX中文問題》中,只在書中的表2-2簡單地列舉了狀態的「名稱」--The state of the request. The five possible values are 0 = uninitialized, 1 = loading, 2 = loaded, 3 = interactive, and 4 = complete。而《Ajax in Action》中好像根本就沒有提到這5種狀態的細節。《Professional AJAX中文問題》中雖不盡人意,但仍是有可取之處:

There are five possible values for readyState:
0 (Uninitialized): The object has been created but the open() method hasn’t been called.
1 (Loading): The open() method has been called but the request hasn’t been sent.
2 (Loaded): The request has been sent.
3 (Interactive). A partial response has been received.
4 (Complete): All data has been received and the connection has been closed.

readyState有五種可能的值:
0 (未初始化): (XMLHttpRequest)對象已經建立,但尚未調用open()方法。
1 (載入):已經調用open() 方法,但還沒有發送請求。
2 (載入完成): 請求已經發送完成。
3 (交互):能夠接收到部分響應數據。
4 (完成):已經接收到了所有數據,而且鏈接已經關閉。

在《Understanding AJAX中文問題: Using JavaScript to Create Rich Internet Applications》中,則用下表進行了說明:

readyState Status Code
Status of the XMLHttpRequest Object
(0) UNINITIALIZED
未初始化 The object has been created but not initialized. (The open method has not been called.)
(XMLHttpRequest)對象已經建立,但還沒有初始化(尚未調用open方法)。
(1) LOADING
載入 The object has been created, but the send method has not been called.
(XMLHttpRequest)對象已經建立,但還沒有調用send方法。
(2) LOADED
載入完成 The send method has been called, but the status and headers are not yet available.
已經調用send方法,(HTTP響應)狀態及頭部還不可用。
(3) INTERACTIVE
交互 Some data has been received. Calling the responseBody and responseText properties at this state to obtain partial results will return an error, because status and response headers are not fully available.
已經接收部分數據。但若在此時調用responseBody和responseText屬性獲取部分結果將會產生錯誤,由於狀態和響應頭部還不徹底可用。
(4) COMPLETED
完成 All the data has been received, and the complete data is available in the responseBody and responseText properties.
已經接收到了所有數據,而且在responseBody和responseText屬性中能夠提取到完整的數據。

根據以上幾本書中的關於readyState五種狀態的介紹,我認爲仍是《Pragmatic AJAX中文問題 A Web 2.0 Primer 》比較到位,由於它提到了對接收到的數據的解析問題,其餘書中都沒有提到這一點,而這一點正是「(3)交互」階段做爲一個必要的轉換過程存在於「(2)載入完成」到「(4)完成」之間的理由,也就是其任務是什麼。歸結起來,我以爲比較理想的解釋方法應該以「狀態:任務(目標)+過程+表現(或特徵)」表達模式來對這幾個狀態進行定義比較準確,並且讓人容易理解。現試總結以下:

readyState 狀態
狀態說明

(0)未初始化
此階段確認XMLHttpRequest對象是否建立,併爲調用open()方法進行未初始化做好準備。值爲0表示對象已經存在,不然瀏覽器會報錯--對象不存在。

(1)載入
此階段對XMLHttpRequest對象進行初始化,即調用open()方法,根據參數(method,url,true)完成對象狀態的設置。並調用send()方法開始向服務端發送請求。值爲1表示正在向服務端發送請求。

(2)載入完成
此階段接收服務器端的響應數據。但得到的還只是服務端響應的原始數據,並不能直接在客戶端使用。值爲2表示已經接收徹底部響應數據。併爲下一階段對數據解析做好準備。

(3)交互
此階段解析接收到的服務器端響應數據。即根據服務器端響應頭部返回的MIME類型把數據轉換成能經過responseBody、responseText或responseXML屬性存取的格式,爲在客戶端調用做好準備。狀態3表示正在解析數據。

(4)完成
此階段確認所有數據都已經解析爲客戶端可用的格式,解析已經完成。值爲4表示數據解析完畢,能夠經過XMLHttpRequest對象的相應屬性取得數據。


概而括之,整個XMLHttpRequest對象的生命週期應該包含以下階段:
建立-初始化請求-發送請求-接收數據-解析數據-完成

在具體應用中,明確了readyState的五個狀態(XMLHttpRequest對象的生命週期各個階段)的含義,就能夠消除對Ajax核心的神祕感(語焉不詳的背後要麼是故弄玄虛,製造神祕感;要麼就是「以其昏昏,令人昭昭」),迅速把握其實質,對減小學習中的挫折感和加強自信心都極其有益。

好比,經過以下示例:


//聲明數組
var states = [「正在初始化……」,
「正在初始化請求……成功!
正在發送請求……」,
「成功!
正在接收數據……」,
「完成!
正在解析數據……」,
「完成!
」];

//回調函數內部代碼片斷
if (xmlHttp.readyState==4)
{
var span = document.createElement(「span」);
span.innerHTML = states[xmlHttp.readyState];
document.body.appendChild(span);

if (xmlHttp.status == 200)
{
var xmldoc = xmlHttp.responseXML;
//其餘代碼
}

//別忘記銷燬,防止內存泄漏
xmlHttp = null;
}else{
var span = document.createElement(「span」);
span.innerHTML = states[xmlHttp.readyState];
document.body.appendChild(span);
}結果以下:

正在初始化請求……成功!
正在發送請求……成功!
正在接收數據……完成!
正在解析數據……完成!


Charleehu 2009-11-01 13:03 發表評論
【轉載】詳解:數據庫名、實例名、ORACLE_SID、數據庫域名、全局數據庫名、服務名
2009年9月21日 20:55

數據庫名、實例名、數據庫域名、全局數據庫名、服務名 ,
這是幾個令不少初學者容易混淆的概念。相信不少初學者都與我同樣被標題上這些個概念搞得一頭霧水。咱們如今就來把它們弄個明白。

1、數據庫名
什麼是數據庫名?
數據庫名就是一個數據庫的標識,就像人的身份證號同樣。他用參數DB_NAME表示,若是一臺機器上裝了多全數據庫,那麼每個數據庫都有一個數據庫名。在數據庫安裝或建立完成以後,參數DB_NAME被寫入參數文件之中。格式以下:
DB_NAME=myorcl
...
在建立數據庫時就應考慮好數據庫名,而且在建立完數據庫以後,數據庫名不宜修改,即便要修改也會很麻煩。由於,數據庫名還被寫入控制文件中,控制文件是以二進制型式存儲的,用戶沒法修改控制文件的內容。假設用戶修改了參數文件中的數據庫名,即修改DB_NAME的值。可是在Oracle啓動時,因爲參數文件中的DB_NAME與控制文件中的數據庫名不一致,致使數據庫啓動失敗,將返回ORA-01103錯誤。

DB_NAME和instance_name在\oracle\admin\szcg\pfile\下的init.ora文件中,其中szcg是數據庫名

數據庫名的做用
數據庫名是在安裝數據庫、建立新的數據庫、建立數據庫控制文件、修改數據結構、備份與恢復數據庫時都須要使用到的。
有不少Oracle安裝文件目錄是與數據庫名相關的,如:
winnt: d:\oracle\product\10.1.0\oradata\DB_NAME\...
Unix: /home/app/oracle/product/10.1.0/oradata/DB_NAME/...
pfile:
winnt: d:\oracle\product\10.1.0\admin\DB_NAME\pfile\ini.ora
Unix: /home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora
跟蹤文件目錄:
winnt: /home/app/oracle/product/10.1.0/admin/DB_NAME/bdump/...
另外,在建立數據時,careate database命令中的數據庫名也要與參數文件中DB_NAME參數的值一致,不然將產生錯誤。
一樣,修改數據庫結構的語句alter database, 固然也要指出要修改的數據庫的名稱。
若是控制文件損壞或丟失,數據庫將不能加載,這時要從新建立控制文件,方法是以nomount方式啓動實例,而後以create controlfile命令建立控制文件,固然這個命令中也是指指DB_NAME。
還有在備份或恢復數據庫時,都須要用到數據庫名。
總之,數據庫名很重要,要準確理解它的做用。

查詢當前數據名
方法一:select name from v$database;
方法二:show parameter db
方法三:查看參數文件。

修改數據庫名
前面建議:應在建立數據庫時就肯定好數據庫名,數據庫名不該做修改,由於修改數據庫名是一件比較複雜的事情。那麼如今就來講明一下,如何在已建立數據以後,修改數據庫名。步驟以下:
1.關閉數據庫。
2.修改數據庫參數文件中的DB_NAME參數的值爲新的數據庫名。
3.以NOMOUNT方式啓動實例,修建控制文件(有關建立控制文件的命令語法,請參考oracle文檔)

2、數據庫實例名
什麼是數據庫實例名?
數據庫實例名是用於和操做系統進行聯繫的標識,就是說數據庫和操做系統之間的交互用的是數據庫實例名。實例名也被寫入參數文件中,該參數爲instance_name,在winnt平臺中,實例名同時也被寫入註冊表。
數據庫名和實例名能夠相同也能夠不一樣。
在通常狀況下,數據庫名和實例名是一對一的關係,但若是在oracle並行服務器架構(即oracle實時應用集羣)中,數據庫名和實例名是一對多的關係。這一點在第一篇中已有圖例說明。

查詢當前數據庫實例名
方法一:select instance_name from v$instance;
方法二:show parameter instance
方法三:在參數文件中查詢。

數據庫實例名與ORACLE_SID
雖然二者都表是oracle實例,但二者是有區別的。instance_name是oracle數據庫參數。而ORACLE_SID是操做系統的環境變量。ORACLD_SID用於與操做系統交互,也就是說,從操做系統的角度訪問實例名,必須經過ORACLE_SID。在winnt不臺,ORACLE_SID還需存在於註冊表中。
且ORACLE_SID必須與instance_name的值一致,不然,你將會收到一個錯誤,在unix平臺,是「ORACLE not available」,在winnt平臺,是「TNS:協議適配器錯誤」。

數據庫實例名與網絡鏈接
數據庫實例名除了與操做系統交互外,還用於網絡鏈接的oracle服務器標識。當你配置oracle主機鏈接串的時候,就須要指定實例名。固然8i之後版本的網絡組件要求使用的是服務名SERVICE_NAME。這個概念接下來講明 。

3、數據庫域名
什麼是數據庫域名?
在分佈式數據庫系統中,不一樣版本的數據庫服務器之間,不論運行的操做系統是unix或是windows,各服務器之間均可以經過數據庫鏈路進行遠程複製,數據庫域名主要用於oracle分佈式環境中的複製。舉例說明如:
全國交通運政系統的分佈式數據庫,其中:
福建節點: fj.jtyz
福建廈門節點: xm.fj.jtyz
江西: jx.jtyz
江西上饒:sr.jx.jtyz
這就是數據庫域名。
數據庫域名在存在於參數文件中,他的參數是db_domain.

查詢數據庫域名
方法一:select value from v$parameter where name = 'db_domain';
方法二:show parameter domain
方法三:在參數文件中查詢。

全局數據庫名
全局數據庫名=數據庫名+數據庫域名,如前述福建節點的全局數據庫名是:oradb.fj.jtyz

4、數據庫服務名
什麼是數據庫服務名?
從oracle9i版本開始,引入了一個新的參數,即數據庫服務名。參數名是SERVICE_NAME。
若是數據庫有域名,則數據庫服務名就是全局數據庫名;不然,數據庫服務名與數據庫名相同。

查詢數據庫服務名
方法一:select value from v$parameter where name = 'service_name';
方法二:show parameter service_name
方法三:在參數文件中查詢。

數據庫服務名與網絡鏈接
從oracle8i開始的oracle網絡組件,數據庫與客戶端的鏈接主機串使用數據庫服務名。以前用的是ORACLE_SID,即數據庫實例名。


Charleehu 2009-09-21 20:55 發表評論
Spring中Bean的生命週期
2009年6月23日 16:56
在spring中,從BeanFactory或ApplicationContext取得的實例爲Singleton,也就是預設爲每個Bean的別名只能維持一個實例,而不是每次都產生
一個新的對象
使用Singleton模式產生單一實例,對單線程的程序說並不會有什麼問題,但對於多線程的程序,就必須注意安全(Thread-safe)的議題,防止多個線程
同時存取共享資源所引起的數據不一樣步問題。
然而在spring中 能夠設定每次從BeanFactory或ApplicationContext指定別名並取得Bean時都產生一個新的實例:例如:
<bean id="helloBean" class="onlyfun.caterpillar.HelloBean" singleton="false">
在spring中,singleton屬性默認是true,只有設定爲false,則每次指定別名取得的Bean時都會產生一個新的實例

一個Bean從建立到銷燬,若是是用BeanFactory來生成,管理Bean的話,會經歷幾個執行階段:
1:Bean的創建:
有BeanFactory讀取Bean定義文件,並生成各個Bean實例
2:屬性注入:
執行相關的Bean屬性依賴注入
3:BeanNameAware的setBeanName():
若是Bean類有實現org.springframework.beans.BeanNameAware接口,則執行它的setBeanName()方法
4:BeanFactoryAware的setBeanFactory():
若是Bean類有實現org.springframework.beans.factory.BeanFactoryAware接口,則執行它的setBeanFactory()方法
5:BeanPostProcessors的ProcessBeforeInitialization()
若是任何的org.springframework.beans.factory.config.BeanPostProcessors實例與Bean實例相關。則執行BeanPostProcessors實例
的processBeforeInitialization()方法
6:initializingBean的afterPropertiesSet():
若是Bean類已實現org.springframework.beans.factory.InitializingBean接口,則執行他的afterProPertiesSet()方法
7:Bean定義文件中定義init-method:
能夠在Bean定義文件中使用"init-method"屬性設定方法名稱例如:
<bean id="helloBean" calss="onlyfun.caterpillar.HelloBean" init-method="initBean">
若是有以上設置的話,則執行到這個階段,就會執行initBean()方法
8:BeanPostProcessors的ProcessaAfterInitialization()
若是有任何的BeanPostProcessors實例與Bean實例關聯,則執行BeanPostProcessors實例的ProcessaAfterInitialization()方法
9:DisposableBean的destroy()
在容器關閉時,若是Bean類有實現org.springframework.beans.factory.DisposableBean接口,則執行他的destroy()方法
10:Bean定義文件中定義destroy-method
在容器關閉時,能夠在Bean定義文件中使用"destroy-method"屬性設定方法名稱,例如:
<bean id="helloBean" class="onlyfun.caterpillar.HelloBean" destroy-method="destroyBean">
若是有以上設定的話,則進行至這個階段時,就會執行destroyBean()方法,若是是使用ApplicationContext來生成並管理Bean的話
則稍有不一樣,使用ApplicationContext來生成及管理Bean實例的話,在執行BeanFactoryAware的setBeanFactory()階段後,若Bean
類上有實現org.springframework.context.ApplicationContextAware接口,則執行其setApplicationContext()方法,接着才執行
BeanPostProcessors的ProcessBeforeInitialization()及以後的流程


Charleehu 2009-06-23 16:56 發表評論
Java正則表達式的解釋說明
2009年6月11日 20:15

表達式意義:

1.字符

x 字符 x。例如a表示字符a
\\ 反斜線字符。在書寫時要寫爲\\\\。(注意:由於java在第一次解析時,把\\\\解析成正則表達式\\,在第二次解析時再解析爲\,因此凡是否是1.1列舉到的轉義字符,包括1.1的\\,而又帶有\的都要寫兩次)
\0n 帶有八進制值 0的字符 n (0 <= n <= 7)
\0nn 帶有八進制值 0的字符 nn (0 <= n <= 7)
\0mnn 帶有八進制值 0的字符 mnn(0 <= m <= 三、0 <= n <= 7)
\xhh 帶有十六進制值 0x的字符 hh
\uhhhh 帶有十六進制值 0x的字符 hhhh
\t 製表符 ('\u0009')
\n 新行(換行)符 ('\u000A')
\r 回車符 ('\u000D')
\f 換頁符 ('\u000C')
\a 報警 (bell) 符 ('\u0007')
\e 轉義符 ('\u001B')
\cx 對應於 x 的控制符
2.字符類
[abc] a、b或 c(簡單類)。例如[egd]表示包含有字符e、g或d。
[^abc] 任何字符,除了 a、b或 c(否認)。例如[^egd]表示不包含字符e、g或d。
[a-zA-Z] a到 z或 A到 Z,兩頭的字母包括在內(範圍)
[a-d[m-p]] a到 d或 m到 p:[a-dm-p](並集)
[a-z&&[def]] d、e或 f(交集)
[a-z&&[^bc]] a到 z,除了 b和 c:[ad-z](減去)
[a-z&&[^m-p]] a到 z,而非 m到 p:[a-lq-z](減去)
3.預約義字符類(注意反斜槓要寫兩次,例如\d寫爲\\d)任何字符

(與行結束符可能匹配也可能不匹配)
\d 數字:[0-9]
\D 非數字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 單詞字符:[a-zA-Z_0-9]
\W 非單詞字符:[^\w]
4.POSIX 字符類(僅 US-ASCII)(注意反斜槓要寫兩次,例如\p{Lower}寫爲\\p{Lower})
\p{Lower} 小寫字母字符:[a-z]。
\p{Upper} 大寫字母字符:[A-Z]
\p{ASCII} 全部 ASCII:[\x00-\x7F]
\p{Alpha} 字母字符:[\p{Lower}\p{Upper}]
\p{Digit} 十進制數字:[0-9]
\p{Alnum} 字母數字字符:[\p{Alpha}\p{Digit}]
\p{Punct} 標點符號:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p{Graph} 可見字符:[\p{Alnum}\p{Punct}]
\p{Print} 可打印字符:[\p{Graph}\x20]
\p{Blank} 空格或製表符:[ \t]
\p{Cntrl} 控制字符:[\x00-\x1F\x7F]
\p{XDigit} 十六進制數字:[0-9a-fA-F]
\p{Space} 空白字符:[ \t\n\x0B\f\r]
5.java.lang.Character 類(簡單的 java 字符類型)
\p{javaLowerCase} 等效於 java.lang.Character.isLowerCase()
\p{javaUpperCase} 等效於 java.lang.Character.isUpperCase()
\p{javaWhitespace} 等效於 java.lang.Character.isWhitespace()
\p{javaMirrored} 等效於 java.lang.Character.isMirrored()
6.Unicode 塊和類別的類
\p{InGreek} Greek 塊(簡單塊)中的字符
\p{Lu} 大寫字母(簡單類別)
\p{Sc} 貨幣符號
\P{InGreek} 全部字符,Greek 塊中的除外(否認)
[\p{L}&&[^\p{Lu}]] 全部字母,大寫字母除外(減去)
7.邊界匹配器
^ 行的開頭,請在正則表達式的開始處使用^。例如:^(abc)表示以abc開頭的字符串。注意編譯的時候要設置參數MULTILINE,如 Pattern p = Pattern.compile(regex,Pattern.MULTILINE);
$ 行的結尾,請在正則表達式的結束處使用。例如:(^bca).*(abc$)表示以bca開頭以abc結尾的行。
\b 單詞邊界。例如\b(abc)表示單詞的開始或結束包含有abc,(abcjj、jjabc 均可以匹配)
\B 非單詞邊界。例如\B(abc)表示單詞的中間包含有abc,(jjabcjj匹配而jjabc、abcjj不匹配)
\A 輸入的開頭
\G 上一個匹配的結尾(我的感受這個參數沒什麼用)。例如\\Gdog表示在上一個匹配結尾處查找dog若是沒有的話則從開頭查找,注意若是開頭不是dog則不能匹配。
\Z 輸入的結尾,僅用於最後的結束符(若是有的話)
行結束符 是一個或兩個字符的序列,標記輸入字符序列的行結尾。
如下代碼被識別爲行結束符:
‐新行(換行)符 ('\n')、
‐後面緊跟新行符的回車符 ("\r\n")、
‐單獨的回車符 ('\r')、
‐下一行字符 ('\u0085')、
‐行分隔符 ('\u2028') 或
‐段落分隔符 ('\u2029)。
\z 輸入的結尾
當編譯模式時,能夠設置一個或多個標誌,例如
Pattern pattern = Pattern.compile(patternString,Pattern.CASE_INSENSITIVE + Pattern.UNICODE_CASE);
下面六個標誌都是支持的:
‐CASE_INSENSITIVE:匹配字符時與大小寫無關,該標誌默認只考慮US ASCII字符。
‐UNICODE_CASE:當與CASE_INSENSITIVE結合時,使用Unicode字母匹配
‐MULTILINE:^和$匹配一行的開始和結尾,而不是整個輸入
‐UNIX_LINES: 當在多行模式下匹配^和$時,只將'\n'看做行終止符
‐DOTALL: 當使用此標誌時,.符號匹配包括行終止符在內的全部字符
‐CANON_EQ: 考慮Unicode字符的規範等價
8.Greedy 數量詞
X? X,一次或一次也沒有
X* X,零次或屢次
X+ X,一次或屢次
X{n} X,剛好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,可是不超過 m 次
9.Reluctant 數量詞
X?? X,一次或一次也沒有
X*? X,零次或屢次
X+? X,一次或屢次
X{n}? X,剛好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,可是不超過 m 次
10.Possessive 數量詞
X?+ X,一次或一次也沒有
X*+ X,零次或屢次
X++ X,一次或屢次
X{n}+ X,剛好 n 次
X{n,}+ X,至少 n 次
X{n,m}+ X,至少 n 次,可是不超過 m 次
Greedy,Reluctant,Possessive的區別在於:(注意僅限於進行.等模糊處理時)
greedy量 詞被看做「貪婪的」,由於它第一次就讀入整個被模糊匹配的字符串。若是第一個匹配嘗試(整個輸入字符串)失敗,匹配器就會在被匹配字符串中的最後一位後退 一個字符而且再次嘗試,重複這個過程,直到找到匹配或者沒有更多剩下的字符能夠後退爲止。根據表達式中使用的量詞,它最後試圖匹配的內容是1 個或者0個字符。
可是,reluctant量詞采起相反的方式:它們從被匹配字符串的開頭開始,而後逐步地一次讀取一個字符搜索匹配。它們最後試圖匹配的內容是整個輸入字符串。
最後,possessive量詞老是讀完整個輸入字符串,嘗試一次(並且只有一次)匹配。和greedy量詞不一樣,possessive從不後退。
11.Logical 運算符
XY X 後跟 Y
X|Y X 或 Y
(X) X,做爲捕獲組。例如(abc)表示把abc做爲一個總體進行捕獲
12.Back 引用
\n 任何匹配的 nth捕獲組
捕獲組能夠經過從左到右計算其開括號來編號。例如,在表達式 ((A)(B(C)))中,存在四個這樣的組:
1 ((A)(B(C)))
2 \A
3 (B(C))
4 (C)
在表達式中能夠經過\n來對相應的組進行引用,例如(ab)34\1就表示ab34ab,(ab)34(cd)\1\2就表示ab34cdabcd。
13.引用
\ Nothing,可是引用如下字符
\Q Nothing,可是引用全部字符,直到 \E。QE之間的字符串會原封不動的使用(1.1中轉義字符的除外)。例如, ab\\Q{|}\\\\E
能夠匹配ab{|}\\
\E Nothing,可是結束從 \Q開始的引用
14.特殊構造(非捕獲)
(?:X) X,做爲非捕獲組
(?idmsux-idmsux) Nothing,可是將匹配標誌由 on 轉爲 off。好比:表達式 (?i)abc(?-i)def 這時,(?i) 打開不區分大小寫開關,abc 匹配
idmsux說明以下:
‐i CASE_INSENSITIVE :US-ASCII 字符集不區分大小寫。(?i)
‐d UNIX_LINES : 打開UNIX換行符
‐m MULTILINE :多行模式(?m)
UNIX下換行爲\n
WINDOWS下換行爲\r\n(?s)
‐u UNICODE_CASE : Unicode 不區分大小寫。(?u)
‐x COMMENTS :能夠在pattern裏面使用註解,忽略pattern裏面的whitespace,以及"#"一直到結尾(#後面爲註解)。(?x)例如(?x)abc#asfsdadsa能夠匹配字符串abc
(?idmsux-idmsux:X) X,做爲帶有給定標誌 on - off 的非捕獲組。與上面的相似,上面的表達式,能夠改寫成爲:(?i:abc)def,或者 (?i)abc(?-i:def)
(?=X) X,經過零寬度的正 lookahead。零寬度正先行斷言,僅當子表達式 X 在 此位置的右側匹配時才繼續匹配。例如,\w+(?=\d) 表示字母后面跟數字,但不捕獲數字(不回溯)
(?!X) X,經過零寬度的負 lookahead。零寬度負先行斷言。僅當子表達式 X 不在 此位置的右側匹配時才繼續匹配。例如,\w+(?!\d) 表示字母后面不跟數字,且不捕獲數字。
(?<=X) X,經過零寬度的正 lookbehind。零寬度正後發斷言。僅當子表達式 X 在 此位置的左側匹配時才繼續匹配。例如,(?<=19)99 表示99前面是數字19,但不捕獲前面的19。(不回溯)
(?
mysql創建UTF8數據庫
2009年6月11日 20:10
CREATE TABLE IF NOT EXISTS test(
test_id int auto_increment,
test_name varchar(50)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

create database if not exists test default character set utf8;

dao.drivername=com.mysql.jdbc.Driver
dao.url=jdbc:mysql://localhost:3306/asking?useUnicode=true&characterEncoding=UTF-8
dao.username=
dao.passwd=

 

Charleehu 2009-06-11 20:10 發表評論
我寫的javascript經常使用靜態方法類,分享你們(轉)
2009年6月11日 20:01
util=function(){
return {
$:function(id){
return document.getElementById(id);
},
trim:function(str){
return str.replace(/(^\s+)|(\s+$)/g, "");
},
len:function(str){
return str.replace(/[^\x00-\xff]/g,'**').length;
},
format:function(str){
var arg = arguments;
return str.replace(/\{(\d+)\}/g, function(m, i){
return arg[parseInt(i)+1];
});
},
each:function(object, callback, args){
var name, i = 0, length = object.length;
if ( args ) {
if ( length === undefined ) {
for ( name in object )
if ( callback.apply( object[ name ], args ) === false )
break;
} else
for ( ; i < length; )
if ( callback.apply( object[ i++ ], args ) === false )
break;
} else {
if ( length === undefined ) {
for ( name in object )
if ( callback.call( object[ name ], name, object[ name ] ) === false )
break;
} else
for ( var value = object[0];
i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
}
},
setCookie:function(name,value,hours,path,domain){
var str=new String();
var nextTime=new Date();
nextTime.setHours(nextTime.getHours()+hours);
str=name+"="+escape(value);
if(hours)
str+=";expires="+nextTime.toGMTString();
if(path)
str+=";path="+path;
if(domain)
str+=";domain="+domain;
document.cookie=str;
},
getCookie:function(name){
var rs=new RegExp("(^|)"+name+"=([^;]*)(;|$)","gi").exec(document.cookie),tmp;
if(tmp=rs)
return unescape(tmp[2]);
return null;
},
delCookie:function(name){
document.cookie = name + "=-1" + "; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
},
/**
*url String
*parms String
*method String default value "get"
*asy Boolean defalut value true
*success Function(http_request.responseText)
**/
ajax:function(config){
var url=config.url,
parms=(config.parms?config.parms:"") + "&t="+new Date().getTime(),
method=config.method||"get",
asy=true;
var http_request=null;

if(method.toLowerCase()=="get"){
url=url+"?"+parms;
parms=null;
}

//開始初始化XMLHttpRequest對象
if(window.XMLHttpRequest) { //Mozilla 瀏覽器
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {//設置MiME類別
http_request.overrideMimeType("text/xml");
}
} else if (window.ActiveXObject) { // IE瀏覽器
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if(!http_request) { // 異常,建立對象實例失敗
throw new Error("不能建立XMLHttpRequest對象實例.");
return null;
}
http_request.open(method,url,asy);

http_request.onreadystatechange=function(){ if (http_request.readyState == 4){ try{ if (http_request.status == 200){ config.success(http_request.responseText); } }catch(e){ throw new Error("數據讀取失敗."); } } }; if(method.toLowerCase()=="post"){ http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); } http_request.send(parms); } };}();

相關文章
相關標籤/搜索