--查看數(shù)據(jù)庫的字符集
show variables like 'character\_set\_%';
show variables like 'collation_%';
--設(shè)置數(shù)據(jù)庫字符編碼
set names GBK
alter database payment character set GBK;
create database mydb character set GBK;
set character_set_client=gbk;
set character_set_connection=gbk;
set character_set_database=gbk;
set character_set_results=gbk;
set character_set_server=gbk;
set character_set_system=gbk;
set collation_connection=gbk;
set collation_database=gbk;
set collation_server=gbk;
mysql4.1.2的默認(rèn)字符集是latin1,latin1屬于ISO8859-1的子集(或者是一回事?毛深入研究),寫入時(shí)需要為iso8859-1的編碼,讀出時(shí)要轉(zhuǎn)換成gbk編碼,就不會(huì)是亂碼。
Class.forName("org.gjt.mm.mysql.Driver");
String url ="jdbc:mysql://localhost/mysql";
Connection conn=DriverManager.getConnection(url,"root","root");
Statement stmt=conn.createStatement();
String a="老哈斯蒂芬";
a=new String(a.getBytes("GBK"),"iso8859-1");
stmt.executeUpdate("insert into zquan (name) value ('"+a+"')");
ResultSet rs=stmt.executeQuery("select name from zquan");
while(rs.next()){
String aaa=rs.getString(1);
System.out.println(new String(aaa.getBytes("iso8859-1"),"GB2312"));
}
轉(zhuǎn)自:http://mhbjava.javaeye.com/blog/26591
1.
<ec:table
items="presidents"
var="pres"
imagePath="${pageContext.request.contextPath}/images/*.gif"
action="${pageContext.request.contextPath}/presidents.run"
filterable="false"
sortable="false" >
...
</ec:table>
<ec:table>里的屬性還有:
a. rowsDisplayed,rowsDisplayed也可以在extremecomponents.properties文件中設(shè)定
b. showPagination ,如果你想在一頁中顯示所有行,只需要設(shè)置showPagination為false。
c. TableTag關(guān)聯(lián)了很多樣式屬性:
<ec:table cellspacing="0" cellpadding="0" border="0" width="80%" styleClass="" />
所有這些都是可選的。
2.
使用highlightRow屬性可以設(shè)置行的高亮顯示,它的值為true或false,默認(rèn)值為false。
<ec:table items="presidents" var="pres" action="${pageContext.request.contextPath}/presidents.run" >
<ec:row highlightRow="true">
<ec:column property="name"/>
<ec:column property="term"/>
</ec:row>
</ec:table>
設(shè)置highlightRow屬性后,它將插入設(shè)置行css類的javascript腳本,默認(rèn)的css 類為highlight。你可以使用highlightClass來使用定制的css類。
3.
為了便于你對(duì)于行數(shù)據(jù)進(jìn)行動(dòng)態(tài)交互處理,提供了onclick、onmouseover和 onmouseout屬性。
<ec:row onclick="" onmouseover="" onmouseout="" />
4.
RowTag關(guān)聯(lián)了很多樣式屬性:
<ec:row styleClass="" highlightClass="" />
5.
提供可選取值方法的主要原因是使你能夠?qū)ζ渌愋偷膆tml標(biāo)簽提供動(dòng)作支持,例如顯示 一幅圖片或者通過定義href使該列成為到其它頁的一個(gè)鏈接。
<ec:table items="presidents" var="pres" action="${pageContext.request.contextPath}/presidents.run" >
<ec:row>
<ec:column property="lastName">
<a href=">
</ec:column>
</ec:row>
</ec:table>
6。
<ec:column property="time" title="時(shí)間" parse="yyyy-MM-dd" format="yyyy年MM月dd日" cell="date"/>
7。
TableTag
中有filterable和sortable屬性,ColumnTag中也有相同的屬性。
列的filterable和sortable屬性將覆蓋表的filterable和sortable屬性設(shè)置。當(dāng)你需要除了對(duì)表中的一、兩列之外的
所有列進(jìn)行過濾和排序時(shí),十分便利。
<ec:table items="presidents" action="${pageContext.request.contextPath}/presidents.run" >
<ec:row>
<ec:column property="firstName" filterable="false"/>
<ec:column property="lastName" sortable="false"/>
</ec:row>
</ec:table>
8。視圖問題:
viewsAllowed
屬性制定類允許使用的視圖。視圖包括:html、pdf、xls、csv,以及任何定制的視圖。
如果你指定一個(gè)或幾個(gè)視圖,那么列僅能使用這些指定的視圖。例如:你指定viewsAllowed="pdf",這意味著
這列只允許PDF導(dǎo)出,而不能進(jìn)行其他格式的導(dǎo)出或html視圖。
<ec:table items="presidents" action="${pageContext.request.contextPath}/presidents.run" >
<ec:row>
<ec:column property="firstName"/>
<ec:column property="lastName" viewsAllowed="pdf"/>
</ec:row
</ec:table>
viewsDenied
屬性制定類不允許使用的視圖。視圖包括:html、pdf、xls、csv,以及任何定制的視圖。
如果你指定一個(gè)或幾個(gè)視圖,那么列僅這些指定的視圖不能被使用。例如:你指定viewsDenied="html",這意味著
這列不允許使用html試圖,但能進(jìn)行任何形式的導(dǎo)出。
<ec:table items="presidents" action="${pageContext.request.contextPath}/presidents.run" >
<ec:row>
<ec:column property="firstName"/>
<ec:column property="lastName" viewsDenied="html"/>
</ec:row>
</ec:table>
9。ParameterTag
eXtremeTable
能夠指定是否處理所有的參數(shù)。默認(rèn)為處理所有的參數(shù),這意味著當(dāng)你進(jìn)行
過濾、排序、分頁時(shí),所有的參數(shù)都被eXtremeTable保存并傳到JSP中。通常這是你需要的功能,
然而,有時(shí)候你需要只允許一些特定的參數(shù)保存到eXtremeTable中。我喜歡把它看作鎖定extremeTable,
可以通過設(shè)置表的autoIncludeParameters屬性值為false來到達(dá)目的:
<ec:table
items="presidents"
action="${pageContext.request.contextPath}/presidents.run"
autoIncludeParameters=”false” >
...
</ec:table>
甚至當(dāng)表被鎖定時(shí),你仍然可以通過簡(jiǎn)單地使用parameter標(biāo)簽來包含一些你想使用的參數(shù)。下例 包含了foo參數(shù):
<ec:table
items="presidents"
action="${pageContext.request.contextPath}/presidents.run"
autoIncludeParameters=”false” >
<ec:parameter name=”foo” value=”${param.foo}”/>
...
</ec:table>
現(xiàn)在所有的eXtremeTable參數(shù)都被鎖定。但過濾、排序和翻頁時(shí),foo參數(shù)仍將被傳遞。
10. .propeties取代
為了替代硬編碼eXtremeTable使用的默認(rèn)屬性值,我在屬性文件中配置所有用到的屬性。 如果你需要覆蓋任何默認(rèn)的設(shè)置,你可以創(chuàng)建自己的extremecomponents.properties文件 并設(shè)置你想改變的值。
為了設(shè)置屬性文件,你應(yīng)該如下例所示在/WEB-INF/web.xml文件中聲明一個(gè)context-param,并 指定你的屬性文件的路徑:
<context-param>
<param-name>extremecomponentsPreferencesLocation</param-name>
<param-value>/org/extremesite/resource/extremecomponents.properties</param-value></context-param>
你可以認(rèn)為屬性文件為你提供了一個(gè)對(duì)所有的eXtremeTables聲明全局設(shè)置的一個(gè)方法。 創(chuàng)建屬性文件的最大好處就是避免在標(biāo)簽中復(fù)制、粘貼相同的屬性。典型的extremecomponents.properties文件如下所示:
table.imagePath=/extremesite/images/*.gif
table.rowsDisplayed=12
column.parse.date=yyyy-MM-dd
column.format.date=MM/dd/yyyy
column.format.currency=$###,###,##0.00
在屬性文件定義的TableTag使用最多的兩個(gè)屬性是:imagePath和rowsDisplayed。如果你不在屬性文件中聲明 這些屬性,你需要在每個(gè)eXtremeTable中添加他們。典型的表如下所示:
<ec:table
items="presidents"
action="${pageContext.request.contextPath}/presidents.run"
imagePath="${pageContext.request.contextPath}/images/*.gif"
rowsDisplayed="12" title="Presidents" > ...</ec:table>
如果在屬性文件聲明imagePath和rowsDisplayed,則表如下所示:
<ec:table
items="presidents"
action="${pageContext.request.contextPath}/presidents.run"
title="Presidents" > ...</ec:table>
正如你所見,屬性文件避免了重復(fù)編碼。
在屬性文件定義的ColumnTag使用最多的兩個(gè)屬性是:parse和format。如果你不在屬性文件中聲明 這些屬性,你需要在每個(gè)eXtremeTable中添加他們。典型的列使用日期cell如下所示:
<ec:column property="dateOfBirth" cell=”date” parse=”yyyy-MM-dd” format=”MM/dd/yyyy”/>
如果在屬性文件聲明parse和format,則列如下所示:
<ec:column property="dateOfBirth" cell=”date”/>
當(dāng)然你仍然可以定義parse和format屬性來覆蓋全局設(shè)置,但是大多數(shù)工程對(duì)于日期使用一致的parse 和format。需要注意屬性文件中parse.date和format.date的聲明語法。
下例為使用貨幣cell的典型列:
<ec:column property="salary" cell=”currency” format=”$###,###,##0.00”/>
如果在屬性文件聲明format,則列如下所示:
<ec:column property="salary" cell=”currency”/>
另外,你可以聲明一個(gè)定制的format并在列中通過使用列的basis來使用它,我把這想象為named屬性。因此如果你的 extremecomponents.properties文件如下所示:
table.format.myCustomDate=yy-MM-dd
那么列可以如下使用定制的format:
<ec:column property="dateOfBirth" cell="date" format=”myCustomDate”>
11。ExportTag
eXtremeTable
具有導(dǎo)出不同格式文件的功能,導(dǎo)出的數(shù)據(jù)為過濾和排序后的所有結(jié)果集,
分頁不會(huì)影響返回的結(jié)果集。換句話說,如果表數(shù)據(jù)分多頁顯示,那么所有頁的數(shù)據(jù)都將被導(dǎo)出。 導(dǎo)出的格式為Microsoft Excel
(OpenOffice Calc)、PDF和CSV。
使用ExportXlsTag導(dǎo)出Microsoft Excel (OpenOffice Calc):
<ec:table items="presidents" action="${pageContext.request.contextPath}/presidents.run" />
<ec:exportXls fileName="presidents.xls" tooltip="Export Excel"/>
...
</ec:table>
使用ExportPdfTag導(dǎo)出PDF。所有要做的就是指定fileName屬性和一些樣式屬性:
<ec:table items="presidents" action="${pageContext.request.contextPath}/presidents.run" />
<ec:exportPdf
fileName="presidents.pdf" tooltip="Export PDF"
headerColor="blue" headerBackgroundColor="red"
headerTitle="Presidents"/> ...
</ec:table>
使用ExportCsvTag導(dǎo)出CSV。當(dāng)使用CSV導(dǎo)出是默認(rèn)的分隔符為‘,’(comma)。你可以使用 delimiter屬性來指定為其他的符號(hào)。下面為指定‘|’(pipe)為CSV分隔符的示例:
<ec:table items="presidents" action="${pageContext.request.contextPath}/presidents.run" />
<ec:exportCsv fileName="presidents.txt" tooltip="Export CSV" delimiter="|"/>
...
</ec:table>
來源:
ChinaUnix博客 作者: 發(fā)布時(shí)間:2007-01-02 04:13:00
a w k是一種程式語言,對(duì)文件資料的處理具有非常強(qiáng)的功能。awk 名稱是由他三個(gè)最初設(shè)計(jì)
者的姓氏的第一個(gè)字母而命名的: Alfred V. Aho、Peter J. We i n b e rg e r、Brian W. Kernighan。
a w k最初在1 9 7 7年完成。1 9 8 5年發(fā)表了一個(gè)新版本的a w k,他的功能比舊版本增強(qiáng)了不少。a w k 能夠用非常短的程式對(duì)文件里的資料做修改、比較、提取、打印等處理。如果使用C 或P a s c a l
等語言編寫程式完成上述的任務(wù)會(huì)十分不方便而且非常花費(fèi)時(shí)間,所寫的程式也會(huì)非常大。a w k不僅僅是個(gè)編程語言,他還是L i n u
x系統(tǒng)管理員和程式員的一個(gè)不可缺少的工具。a w k語言本身十分好學(xué),易于掌控,并且特別的靈活。 gawk 是G N U計(jì)劃下所做的a w
k,gawk 最初在1 9 8 6年完成,之后不斷地被改進(jìn)、更新。
gawk 包含awk 的所有功能。
6.1 gawk的主要功能
gawk 的主要功能是針對(duì)文件的每一行( l i n e ),也就是每一條記錄,搜尋指定的格式。當(dāng)某
一行符合指定的格式時(shí),gawk 就會(huì)在此行執(zhí)行被指定的動(dòng)作。gawk 依此方式自動(dòng)處理輸入文
件的每一行直到輸入文件檔案結(jié)束。
g a w k經(jīng)常用在如下的幾個(gè)方面:
• 根據(jù)需求選擇文件的某幾行,幾列或部分字段以供顯示輸出。
• 分析文件中的某一個(gè)字出現(xiàn)的頻率、位置等。
• 根據(jù)某一個(gè)文件的信息準(zhǔn)備格式化輸出。
• 以一個(gè)功能十分強(qiáng)大的方式過濾輸出文件。
• 根據(jù)文件中的數(shù)值進(jìn)行計(jì)算。
6.2 怎么執(zhí)行g(shù)awk程式
基本上有兩種方法能執(zhí)行g(shù) a w k程式。
如果gawk 程式非常短,則能將gawk 直接寫在命令行,如下所示:
gawk ’program’ input-file1 input-file2 ...
其中program 包括一些pattern 和a c t i o n。
如果gawk 程式較長(zhǎng),較為方便的做法是將gawk 程式存在一個(gè)文件中,
gawk 的格式如下所示:
gawk -f program-file input-file1 input-file2 ...
gawk 程式的文件不止一個(gè)時(shí),執(zhí)行g(shù)awk 的格式如下所示:
gawk -f program-file1 -f program-file2 ... input-file1 input-file2 ...
6.3 文件、記錄和字段
一般情況下,g a w k能處理文件中的數(shù)值數(shù)據(jù),但也能處理字符串信息。如果數(shù)據(jù)沒有
存儲(chǔ)在文件中,能通過管道命令和其他的重定向方法給g a w k提供輸入。當(dāng)然, g a w k只能處
理文本文件(A S C I I碼文件)。
電話號(hào)碼本就是個(gè)g a w k能處理的文件的簡(jiǎn)單例子。電話號(hào)碼本由非常多條目組成,每一
個(gè)條目都有同樣的格式:姓、名、地址、電話號(hào)碼。每一個(gè)條目都是按字母順序排列。
在g a w k中,每一個(gè)這樣的條目叫做一個(gè)記錄。他是個(gè)完整的數(shù)據(jù)的集合。例如,電話號(hào)
碼本中的Smith John這個(gè)條目,包括他的地址和電話號(hào)碼,就是一條記錄。
記錄中的每一項(xiàng)叫做一個(gè)字段。在g a w k中,字段是最基本的單位。多個(gè)記錄的集合組成了
一個(gè)文件。
大多數(shù)情況下,字段之間由一個(gè)特別的字符分開,像空格、TA B、分號(hào)等。這些字符叫做
字段分隔符。請(qǐng)看下面這個(gè)/ e t c / p a s s w d文件:
t p a r k e r ; t 3 6 s 6 2 h s h ; 5 0 1 ; 1 0 1 ; Tim Parker;/home/tparker;/bin/bash
etreijs;2ys639dj3h;502;101;Ed Tr e i j s ; / h o m e / e t r e i j s ; / b i n / t c s h
y c h o w ; 1 h 2 7 s j ; 5 0 3 ; 1 0 1 ; Yvonne Chow;/home/ychow;/bin/bash
你能看出/ e t c / p a s s w d文件使用分號(hào)作為字段分隔符。/ e t c / p a s s w d文件中的每一行都包括
七個(gè)字段:用戶名;口令;用戶I D;工作組I D;注釋; h o m e目錄;啟始的外殼。如果你想要
查找第六個(gè)字段,只需數(shù)過五個(gè)分號(hào)即可。
但考慮到以下電話號(hào)碼本的例子,你就會(huì)發(fā)現(xiàn)一些問題:
Smith John 13 Wilson St. 555-1283
Smith John 2736 Artside Dr Apt 123 555-2736
Smith John 125 Westmount Cr 555-1726
雖然我們能夠分辨出每個(gè)記錄包括四個(gè)字段,但g a w k卻無能為力。電話號(hào)碼本使用空格作
為分隔符,所以g a w k認(rèn)為S m i t h是第一個(gè)字段, John 是第二個(gè)字段,1 3是第三個(gè)字段,依次類
推。就g a w k而言,如果用空格作為字段分隔符的話,則第一個(gè)記錄有六個(gè)字段,而第二個(gè)記
錄有八個(gè)字段。
所以,我們必須找出一個(gè)更好的字段分隔符。例如,像下面相同使用斜杠作為字段分隔
符:
Smith/John/13 Wilson St./555-1283
Smith/John/2736 Artside Dr/Apt/123/555-2736
Smith/John/125 Westmount Cr/555-1726
如果你沒有指定其他的字符作為字段分隔符,那么g a w k將缺省地使用空格或TA B作為字段
分隔符。
6.4 模式和動(dòng)作
在g a w k語言中每一個(gè)命令都由兩部分組成:一個(gè)模式( p a t t e r n)和一個(gè)相應(yīng)的動(dòng)作
(a c t i o n)。只要模式符合,g a w k就會(huì)執(zhí)行相應(yīng)的動(dòng)作。其中模式部分用兩個(gè)斜杠括起來,而動(dòng)
作部分用一對(duì)花括號(hào)括起來。例如:
/ p a t t e r n 1 / { a c t i o n 1 }
/ p a t t e r n 2 / { a c t i o n 2 }
/ p a t t e r n 3 / { a c t i o n 3 }
所有的g a w k程式都是由這樣的一對(duì)對(duì)的模式和動(dòng)作組成的。其中模式或動(dòng)作都能夠被省
略,不過兩個(gè)不能同時(shí)被省略。如果模式被省略,則對(duì)于作為輸入的文件里面的每一行,動(dòng)作
都會(huì)被執(zhí)行。如果動(dòng)作被省略,則缺省的動(dòng)作被執(zhí)行,既顯示出所有符合模式的輸入行而不做
所有的改動(dòng)。
下面是個(gè)簡(jiǎn)單的例子,因?yàn)間awk 程式非常短,所以將gawk 程式直接寫在外殼命令行:
gawk ’/tparker/’ /etc/passwd
此程式在上面提到的/ e t c / p a s s w d文件中尋找符合t p a r k e r模式的記錄并顯示(此例中沒有動(dòng)
作,所以缺省的動(dòng)作被執(zhí)行)。
讓我們?cè)倏匆粋€(gè)例子:
gawk ’/UNIX/{print $2}’ file2.data
此命令將逐行查找f i l e 2 . d a t a文件中包含U N I X的記錄,并打印這些記錄的第二個(gè)字段。
你也能在一個(gè)命令中使用多個(gè)模式和動(dòng)作對(duì),例如:
gawk ’/scandal/{print $1} /rumor/{print $2}’ gossip_file
此命令搜索文件g o s s i p _ f i l e中包括s c a n d a l的記錄,并打印第一個(gè)字段。然后再從頭搜索
g o s s i p _ f i l e中包括r u m o r的記錄,并打印第二個(gè)字段。
6.5 比較運(yùn)算和數(shù)值運(yùn)算
g a w k有非常多比較運(yùn)算符,下面列出重要的幾個(gè):
= = 相等
! = 不相等
> 大于
= 大于等于
100’ testfile
將會(huì)顯示文件testfile 中那些第四個(gè)字段大于1 0 0的記錄。
下表列出了g a w k中基本的數(shù)值運(yùn)算符。
運(yùn)算符說明示例
+ 加法運(yùn)算2+6
- 減法運(yùn)算6-3
* 乘法運(yùn)算2*5
/ 除法運(yùn)算8/4
^ 乘方運(yùn)算3^2 (=9)
% 求余數(shù)9%4 (=1)
例如:
{print $3/2}
顯示第三個(gè)字段被2除的結(jié)果。
在g a w k中,運(yùn)算符的優(yōu)先權(quán)和一般的數(shù)學(xué)運(yùn)算的優(yōu)先權(quán)相同。例如:
{print $1+$2*$3}
顯示第二個(gè)字段和第三個(gè)字段相乘,然后和第一個(gè)字段相加的結(jié)果。
你也能用括號(hào)改動(dòng)優(yōu)先次序。例如:
{print ($1+$2)*$3}
顯示第一個(gè)字段和第二個(gè)字段相加,然后和第三個(gè)字段相乘的結(jié)果。
6.6 內(nèi)部函數(shù)
g a w k中有各種的內(nèi)部函數(shù),目前介紹如下:
6.6.1 隨機(jī)數(shù)和數(shù)學(xué)函數(shù)
sqrt(x) 求x 的平方根
sin(x) 求x 的正弦函數(shù)
cos(x) 求x 的余弦函數(shù)
a t a n 2 ( x,y) 求x / y的余切函數(shù)
log(x) 求x 的自然對(duì)數(shù)
exp(x) 求x 的e 次方
int(x) 求x 的整數(shù)部分
rand() 求0 和1之間的隨機(jī)數(shù)
srand(x) 將x 設(shè)置為r a n d ( )的種子數(shù)
6.6.2 字符串的內(nèi)部函數(shù)
• i n d e x ( i n,find) 在字符串in 中尋找字符串find 第一次出現(xiàn)的地方,返回值是字符串
find 出目前字符串in 里面的位置。如果在字符串in 里面未找到字符串f i n d,則返回值為
0。
例如:
print index("peanut"," a n " )
顯示結(jié)果3。
• length(string) 求出string 有幾個(gè)字符。
例如:
l e n g t h ( " a b c d e " )
顯示結(jié)果5。
• m a t c h ( s t r i n g,r e g e x p ) 在字符串string 中尋找符合regexp 的最長(zhǎng)、最靠左邊的子字
符串。返回值是regexp 在string 的開始位置,即i n d e x值。match 函數(shù)將會(huì)設(shè)置系統(tǒng)變量
R S TA RT 等于i n d e x的值,系統(tǒng)變量RLENGTH 等于符合的字符個(gè)數(shù)。如果不符合,則會(huì)
設(shè)置R S TA RT 為0、RLENGTH 為- 1。
• s p r i n t f ( f o r m a t,e x p r e s s i o n 1,. . . ) 和printf 類似,不過sprintf 并不顯示,而是返回字符
串。
例如:
sprintf("pi = %.2f (approx.)",2 2 / 7 )
返回的字符串為pi = 3.14 (approx.)
• s u b ( r e g e x p,r e p l a c e m e n t,t a rg e t ) 在字符串t a rget 中尋找符合regexp 的最長(zhǎng)、最靠左的
地方,以字串replacement 代替最左邊的r e g e x p。
例如:
str = "water,w a t e r,e v e r y w h e r e "
s u b ( / a t /, " i t h ",s t r )
結(jié)果字符串s t r會(huì)變成
w i t h e r,w a t e r,e v e r y w h e r e
• g s u b ( r e g e x p,r e p l a c e m e n t,t a rget) 和前面的s u b類似。在字符串t a rget 中尋找符合
r e g e x p的所有地方,以字符串replacement 代替所有的r e g e x p。
例如:
s t r = " w a t e r,w a t e r,e v e r y w h e r e "g s u b ( / a t /, " i t h ",s t r )
結(jié)果字符串s t r會(huì)變成
w i t h e r,w i t h e r,e v e r y w h e r e
• s u b s t r ( s t r i n g,s t a r t,length) 返回字符串string 的子字符串,這個(gè)子字符串的長(zhǎng)度為
l e n g t h,從第start 個(gè)位置開始。
例如:
s u b s t r ( " w a s h i n g t o n ",5,3 )
返回值為i n g
如果沒有l(wèi)ength ,則返回的子字符串是從第start 個(gè)位置開始至結(jié)束。
例如:
s u b s t r ( " w a s h i n g t o n ",5 )
返回值為i n g t o n。
• tolower(string) 將字符串s t r i n g的大寫字母改為小寫字母。
例如:
tolower("MiXeD cAsE 123")
返回值為mixed case 123。
• toupper(string) 將字符串s t r i n g的小寫字母改為大寫字母。
例如:
toupper("MiXeD cAsE 123")
返回值為MIXED CASE 123。
6.6.3 輸入輸出的內(nèi)部函數(shù)
• close(filename) 將輸入或輸出的文件filename 關(guān)閉。
• system(command) 此函數(shù)允許用戶執(zhí)行操作系統(tǒng)的指令,執(zhí)行完畢后將回到g a w k程
序。
例如:
BEGIN {system("ls")}
6.7 字符串和數(shù)字
字符串就是一連串的字符,他能被g a w k逐字地翻譯。字符串用雙引號(hào)括起來。數(shù)字不能
用雙引號(hào)括起來,并且g a w k將他當(dāng)作一個(gè)數(shù)值。例如:
gawk ’$1 != "Tim" {print}’ testfile
此命令將顯示第一個(gè)字段和Ti m不相同的所有記錄。如果命令中Ti m兩邊不用雙引號(hào),
g a w k將不能正確執(zhí)行。
再如:
gawk ’$1 == "50" {print}’ testfile
此命令將顯示所有第一個(gè)字段和5 0這個(gè)字符串相同的記錄。g a w k不管第一字段中的數(shù)值
的大小,而只是逐字地比較。這時(shí),字符串5 0和數(shù)值5 0并不相等。
6.8 格式化輸出
我們能讓動(dòng)作顯示一些比較復(fù)雜的結(jié)果。例如:
gawk ’$1 != "Tim" {print $1,$ 5,$ 6,$2}’ testfile
將顯示t e s t f i l e文件中所有第一個(gè)字段和Ti m不相同的記錄的第一、第五、第六和第二個(gè)字
段。
進(jìn)一步,你能在p r i n t動(dòng)作中加入字符串,例如:
gawk ’$1 != "Tim" {print "The entry for ",$ 1,"is not Tim. ",$2}’ testfile
p r i n t動(dòng)作的每一部分用逗號(hào)隔開。
借用C語言的格式化輸出指令,能讓g a w k的輸出形式更為多樣。這時(shí),應(yīng)該用p r i n t f而不
是p r i n t。例如:
{printf "%5s likes this language\n",$ 2 }
p r i n t f中的%5s 部分告訴gawk 怎么格式化輸出字符串,也就是輸出5個(gè)字符長(zhǎng)。他的值由
printf 的最后部分指出,在此是第二個(gè)字段。\ n是回車換行符。如果第二個(gè)字段中存儲(chǔ)的是人
名,則輸出結(jié)果大致如下:
Tim likes this language
G e o ff likes this language
Mike likes this language
Joe likes this language
gawk 語言支持的其他格式控制符號(hào)如下:
• c 如果是字符串,則顯示第一個(gè)字符;如果是整數(shù),則將數(shù)字以ASCII 字符的形式顯示。
例如:
printf “% c”,6 5
結(jié)果將顯示字母A。
• d 顯示十進(jìn)制的整數(shù)。
• i 顯示十進(jìn)制的整數(shù)。
• e 將浮點(diǎn)數(shù)以科學(xué)記數(shù)法的形式顯示。
例如:
print “$ 4 . 3 e”,1 9 5 0
結(jié)果將顯示1 . 9 5 0 e + 0 3。
• f 將數(shù)字以浮點(diǎn)的形式顯示。
• g 將數(shù)字以科學(xué)記數(shù)法的形式或浮點(diǎn)的形式顯示。數(shù)字的絕對(duì)值如果大于等于0 . 0 0 0 1則
以浮點(diǎn)的形式顯示,否則以科學(xué)記數(shù)法的形式顯示。
• o 顯示無符號(hào)的八進(jìn)制整數(shù)。
• s 顯示一個(gè)字符串。
• x 顯示無符號(hào)的十六進(jìn)制整數(shù)。1 0至1 5以a至f表示。
• X 顯示無符號(hào)的十六進(jìn)制整數(shù)。1 0至1 5以A至F表示。
• % 他并不是真正的格式控制字符,% %將顯示%。
當(dāng)你使用這些格式控制字符時(shí),你能在控制字符前給出數(shù)字,以表示你將用的幾位或幾
個(gè)字符。例如,6 d表示一個(gè)整數(shù)有6位。再請(qǐng)看下面的例子:
{printf "%5s works for %5s and earns %2d an hour",$ 1,$ 2,$ 3 }
將會(huì)產(chǎn)生類似如下的輸出:
Joe works for Mike and earns 12 an hour
當(dāng)處理數(shù)據(jù)時(shí),你能指定數(shù)據(jù)的精確位數(shù)
{printf "%5s earns $%.2f an hour",$ 3,$ 6 }
其輸出將類似于:
Joe earns $12.17 an hour
你也能使用一些換碼控制符格式化整行的輸出。之所以叫做換碼控制符,是因?yàn)間 a w k對(duì)
這些符號(hào)有特別的解釋。下面列出常用的換碼控制符:
\a 警告或響鈴字符。
\b 后退一格。
\f 換頁。
\n 換行。
\r 回車。
\t Ta b。
\v 垂直的t a b。
6.9 改動(dòng)字段分隔符
在g a w k中,缺省的字段分隔符一般是空格符或TA B。但你能在命令行使用- F選項(xiàng)改動(dòng)字
符分隔符,只需在- F后面跟著你想用的分隔符即可。
gawk -F" ;"’/tparker/{print}’ /etc/passwd
在此例中,你將字符分隔符設(shè)置成分號(hào)。注意: - F必須是大寫的,而且必須在第一個(gè)引號(hào)
之前。
6.10 元字符
g a w k語言在格式匹配時(shí)有其特別的規(guī)則。例如, c a t能夠和記錄中所有位置有這三個(gè)字符
的字段匹配。但有時(shí)你需要一些更為特別的匹配。如果你想讓c a t只和c o n c a t e n a t e匹配,則需要
在格式兩端加上空格:
/ cat / {print}
再例如,你希望既和c a t又和C AT匹配,則能使用或(|):
/ cat | CAT / {print}
在g a w k中,有幾個(gè)字符有特別意義。下面列出能用在g a w k格式中的這些字符:
• ^ 表示字段的開始。
例如:
$3 ~ /^b/
如果第三個(gè)字段以字符b開始,則匹配。
• $ 表示字段的結(jié)束。
例如:
$3 ~ /b$/
如果第三個(gè)字段以字符b結(jié)束,則匹配。
• . 表示和所有單字符m匹配。
例如:
$3 ~ /i.m/
如果第三個(gè)字段有字符i,則匹配。
• | 表示“或”。
例如:
/ c a t | C AT/
和cat 或C AT字符匹配。
• * 表示字符的零到多次重復(fù)。
例如:
/UNI*X/
和U N X、U N I X、U N I I X、U N I I I X等匹配。
• + 表示字符的一次到多次重復(fù)。
例如:
/UNI+X/
和U N I X、U N I I X等匹配。
• \{a,b\} 表示字符a次到b次之間的重復(fù)。
例如:
/ U N I \ { 1,3 \ } X
和U N I X、U N I I X和U N I I I X匹配。
• ? 表示字符零次和一次的重復(fù)。
例如:
/UNI?X/
和UNX 和U N I X匹配。
• [] 表示字符的范圍。
例如:
/I[BDG]M/
和I B M、I D M和I G M匹配
• [^] 表示不在[ ]中的字符。
例如:
/I[^DE]M/
和所有的以I開始、M結(jié)束的包括三個(gè)字符的字符串匹配,除了I D M和I E M之外。
6.11 調(diào)用gawk程式
當(dāng)需要非常多對(duì)模式和動(dòng)作時(shí),你能編寫一個(gè)g a w k程式(也叫做g a w k腳本)。在g a w k程式
中,你能省略模式和動(dòng)作兩邊的引號(hào),因?yàn)樵趃 a w k程式中,模式和動(dòng)作從哪開始和從哪結(jié)
束時(shí)是非常顯然的。
你能使用如下命令調(diào)用g a w k程式:
gawk -f script filename
此命令使g a w k對(duì)文件f i l e n a m e執(zhí)行名為s c r i p t的g a w k程式。
如果你不希望使用缺省的字段分隔符,你能在f選項(xiàng)后面跟著F選項(xiàng)指定新的字段分隔符
(當(dāng)然你也能在g a w k程式中指定),例如,使用分號(hào)作為字段分隔符:
gawk -f script -F";" filename
如果希望gawk 程式處理多個(gè)文件,則把各個(gè)文件名羅列其后:
gawk -f script filename1 filename2 filename3 ...
缺省情況下, g a w k的輸出將送往屏幕。但你能使用L i n u x的重定向命令使g a w k的輸出送
往一個(gè)文件:
gawk -f script filename > save_file
6.12 BEGIN和END
有兩個(gè)特別的模式在g a w k中非常有用。B E G I N模式用來指明g a w k開始處理一個(gè)文件之前執(zhí)行一些動(dòng)作。B E G I N經(jīng)常用來初始化數(shù)值,設(shè)置參數(shù)等。E N D模式用來在文件處理完成后
執(zhí)行一些指令,一般用作總結(jié)或注釋。
BEGIN 和E N D中所有要執(zhí)行的指令都應(yīng)該用花括號(hào)括起來。BEGIN 和E N D必須使用大寫。
請(qǐng)看下面的例子:
BEGIN { print "Starting the process the file" }
$1 == "UNIX" {print}
$2 > 10 {printf "This line has a value of %d",$ 2 }
END { print "Finished processing the file. Bye!"}
此程式中,先顯示一條信息: Starting the process the file,然后將所有第一個(gè)字段等于
U N I X的整條記錄顯示出來,然后再顯示第二個(gè)字段大于10 的記錄,最后顯示信息: F i n i s h e d
processing the file. Bye!。
6.13 變量
在g a w k中,能用等號(hào)( = )給一個(gè)變量賦值:
var1 = 10
在g a w k中,你不必事先聲明變量類型。
請(qǐng)看下面的例子:
$1 == "Plastic" { count = count + 1 }
如果第一個(gè)字段是P l a s t i c,則c o u n t的值加1。在此之前,我們應(yīng)當(dāng)給c o u n t賦予過初值,一
般是在B E G I N部分。
下面是比較完整的例子:
BEGIN { count = 0 }
$5 == "UNIX" { count = count + 1 }
END { printf "%d occurrences of UNIX were found",count }
變量能和字段和數(shù)值一起使用,所以,下面的表達(dá)式均為合法:
count = count + $6
count = $5 - 8
count = $5 + var1
變量也能是格式的一部分,例如:
$2 > max_value {print "Max value exceeded by ",$2 - max_value}
$4 - var1 $2){
print "The first column is larger"
}
else {
print "The second column is larger"
} )
6.15.2 while 循環(huán)
while 循環(huán)的語法如下:
while (expression){
c o m m a n d s
}
例如:
# interest calculation computes compound interest
# inputs from a file are the amount,interest_rateand years
{var = 1
while (var 0){
print line[var]
v a r - -
}
}
此段程式讀取一個(gè)文件的每一行,并用相反的順序顯示出來。我們使用N R作為數(shù)組的下
標(biāo)來存儲(chǔ)文件的每一條記錄,然后在從最后一條記錄開始,將文件逐條地顯示出來。
6.17 用戶自定義函數(shù)
復(fù)雜的gawk 程式常常能使用自己定義的函數(shù)來簡(jiǎn)化。調(diào)用用戶自定義函數(shù)和調(diào)用內(nèi)部
函數(shù)的方法相同。函數(shù)的定義能放在gawk 程式的所有地方。
用戶自定義函數(shù)的格式如下:
function name (parameter-list) {
b o d y - o f - f u n c t i o n
}
name 是所定義的函數(shù)的名稱。一個(gè)正確的函數(shù)名稱可包括一序列的字母、數(shù)字、下標(biāo)線
( u n d e r s c o r e s ),不過不可用數(shù)字做開頭。p a r a m e t e r-list 是函數(shù)的全部參數(shù)的列表,各個(gè)參數(shù)之
間以逗點(diǎn)隔開。body-of-function 包含gawk 的表達(dá)式,他是函數(shù)定義里最重要的部分,他決定
函數(shù)實(shí)際要做的事情。
下面這個(gè)例子,會(huì)將每個(gè)記錄的第一個(gè)字段的值的平方和第二個(gè)字段的值的平方加起來。
{print "sum =",S q u a r e S u m ( $ 1,$ 2 ) }
function SquareSum(x,y) {
s u m = x * x + y * y
return sum
}
到此,我們已知道了g a w k的基本用法。g a w k語言十分易學(xué)好用,例如,你能用g a w k
編寫一段小程式來計(jì)算一個(gè)目錄中所有文件的個(gè)數(shù)和容量。如果用其他的語言,如C語言,則
會(huì)十分的麻煩,相反,g a w k只需要幾行就能完成此工作。
6.18 幾個(gè)實(shí)例
最后,再舉幾個(gè)g a w k的例子:
gawk ’{if (NF > max) max = NF}
END {print max}’
此程式會(huì)顯示所有輸入行之中字段的最大個(gè)數(shù)。
gawk ’length($0) > 80’
此程式會(huì)顯示出超過80 個(gè)字符的每一行。此處只有模式被列出,動(dòng)作是采用缺省值顯示
整個(gè)記錄。
gawk ’NF > 0’
顯示擁有至少一個(gè)字段的所有行。這是個(gè)簡(jiǎn)單的方法,將一個(gè)文件里的所有空白行刪除。
gawk ’BEGIN {for (i = 1; i max) max = NF}
END {print max}’
此程式會(huì)顯示所有輸入行之中字段的最大個(gè)數(shù)。
gawk ’length($0) > 80’
此程式會(huì)顯示出超過80 個(gè)字符的每一行。此處只有模式被列出,動(dòng)作是采用缺省值顯示
整個(gè)記錄。
gawk ’NF > 0’
顯示擁有至少一個(gè)字段的所有行。這是個(gè)簡(jiǎn)單的方法,將一個(gè)文件里的所有空白行刪除。
gawk ’BEGIN {for (i = 1; i
名稱: crontab
使用權(quán)限: 所有使用者
使用方式:
crontab file [-u user] ——用指定的文件替代目前的crontab。
crontab -[-u user] ——用標(biāo)準(zhǔn)輸入替代目前的crontab.
crontab -l[user] ——列出用戶目前的crontab.
crontab -e[user] ——編輯用戶目前的crontab.
crontab -d[user] ——?jiǎng)h除用戶目前的crontab.
crontab -c dir ——指定crontab的目錄。
crontab文件的格式:M H D m d cmd.
M: 分鐘(0-59)。
H:小時(shí)(0-23)。
D:天(1-31)。
m: 月(1-12)。
d: 一星期內(nèi)的天(0~6,0為星期天)。
cmd要運(yùn)行的程序,程序被送入sh執(zhí)行,這個(gè)shell只有USER,HOME,SHELL這三個(gè)環(huán)境變量
說明 :
crontab
是用來讓使用者在固定時(shí)間或固定間隔執(zhí)行程序之用,換句話說,也就是類似使用者的時(shí)程表。-u user 是指設(shè)定指定 user
的時(shí)程表,這個(gè)前提是你必須要有其權(quán)限(比如說是 root)才能夠指定他人的時(shí)程表。如果不使用 -u user 的話,就是表示設(shè)定自己的時(shí)程表。
參數(shù) :
crontab -e : 執(zhí)行文字編輯器來設(shè)定時(shí)程表,內(nèi)定的文字編輯器是 VI,如果你想用別的文字編輯器,則請(qǐng)先設(shè)定 VISUAL 環(huán)境變數(shù)來指定使用那個(gè)文字編輯器(比如說 setenv VISUAL joe)
crontab -r : 刪除目前的時(shí)程表
crontab -l : 列出目前的時(shí)程表
crontab file [-u user] ——用指定的文件替代目前的crontab。
時(shí)程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分鐘,f2 表示小時(shí),f3 表示一個(gè)月份中的第幾日,f4 表示月份,f5 表示一個(gè)星期中的第幾天。program 表示要執(zhí)行的程序。
當(dāng) f1 為 * 時(shí)表示每分鐘都要執(zhí)行 program,f2 為 * 時(shí)表示每小時(shí)都要執(zhí)行程序,其余類推。
當(dāng) f1 為 a-b 時(shí)表示從第 a 分鐘到第 b 分鐘這段時(shí)間內(nèi)要執(zhí)行,f2 為 a-b 時(shí)表示從第 a 到第 b 小時(shí)都要執(zhí)行,其余類推。
當(dāng) f1 為 */n 時(shí)表示每 n 分鐘個(gè)時(shí)間間隔執(zhí)行一次,f2 為 */n 表示每 n 小時(shí)個(gè)時(shí)間間隔執(zhí)行一次,其馀類推。
當(dāng) f1 為 a, b, c,... 時(shí)表示第 a, b, c,... 分鐘要執(zhí)行,f2 為 a, b, c,... 時(shí)表示第 a, b, c...個(gè)小時(shí)要執(zhí)行,其馀類推。
使用者也可以將所有的設(shè)定先存放在檔案 file 中,用 crontab file 的方式來設(shè)定時(shí)程表。
例子 :
#每天早上7點(diǎn)執(zhí)行一次 /bin/ls :
0 7 * * * /bin/ls
在 12 月內(nèi), 每天的早上 6 點(diǎn)到 12 點(diǎn)中,每隔3個(gè)小時(shí)執(zhí)行一次 /usr/bin/backup :
0/3 6-12 * 12 * /usr/bin/backup
#周一到周五每天下午 5:00 寄一封信給 alex@domain.name :
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
#每月每天的午夜 0 點(diǎn) 20 分, 2 點(diǎn) 20 分, 4 點(diǎn) 20 分....執(zhí)行 echo "haha"
20 0-23/2 * * * echo "haha"
注意 :
當(dāng)程序在你所指定的時(shí)間執(zhí)行后,系統(tǒng)會(huì)寄一封信給你,顯示該程序執(zhí)行的內(nèi)容,若是你不希望收到這樣的信,請(qǐng)?jiān)诿恳恍锌找桓裰蠹由?> /dev/null 2>&1 即可
例子2 :
#每天早上6點(diǎn)10分
10 6 * * * date
#每?jī)蓚€(gè)小時(shí)
0 */2 * * * date
#晚上11點(diǎn)到早上8點(diǎn)之間每?jī)蓚€(gè)小時(shí),早上8點(diǎn)
0 23-7/2,8 * * * date
#每個(gè)月的4號(hào)和每個(gè)禮拜的禮拜一到禮拜三的早上11點(diǎn)
0 11 4 * mon-wed date
#1月份日早上4點(diǎn)
0 4 1 jan * date
原文地址:http://h1yn.itpub.net/post/2084/222108
舉例:
oracle:
select decode(pay_name,'aaaa','bbb',pay_name),sum(comm_order),sum(suc_order),sum(suc_amount) From payment.order_tab group by decode(pay_name,'aaaaa','bbbb',pay_name)

轉(zhuǎn)換成mysql:實(shí)現(xiàn)
select case when pay_name='aaa' then 'bbb' else pay_name end ,sum(comm_order),sum(suc_order),sum(suc_amount) From payment.order_tab group by case when pay_name='aaa' then 'bbb' else pay_name end
在mysql中有decode()是這樣解釋的:一種是加密,另外一種是比較
在Oracle中:
語法:DECODE(control_value,value1,result1[,value2,result2…] [,default_result]);control _value試圖處理的數(shù)值。DECODE函數(shù)將該數(shù)值與后面的一系列的偶序相比較,以決定返回值。
value1是一組成序偶的數(shù)值。如果輸入數(shù)值與之匹配成功,則相應(yīng)的結(jié)果將被返回。對(duì)應(yīng)一個(gè)空的返回值,可以使用關(guān)鍵字NULL于之對(duì)應(yīng)
result1 是一組成序偶的結(jié)果值。
default_result 未能與任何一個(gè)值匹配時(shí),函數(shù)返回的默認(rèn)值。
例如:
selectdecode( x , 1 , ‘x is 1 ’, 2 , ‘x is 2 ’, ‘others’) from dual
當(dāng)x等于1時(shí),則返回‘x is 1’。
當(dāng)x等于2時(shí),則返回‘x is 2’。
否則,返回others’。
需要,比較2個(gè)值的時(shí)候,可以配合SIGN()函數(shù)一起使用。
SELECT DECODE( SIGN(5 -6), 1 'Is Positive', -1, 'Is Nagative', 'Is Zero')
同樣,也可以用CASE實(shí)現(xiàn):
SELECT CASE SIGN(5 - 6)
WHEN 1 THEN 'Is Positive'
WHEN -1 THEN 'Is Nagative'
ELSE 'Is Zero' END
FROM DUAL
|
此外,還可以在Order by中使用Decode。
例如:表table_subject,有subject_name列。要求按照:語、數(shù)、外的順序進(jìn)行排序。這時(shí),就可以非常輕松的使用Decode完成要求了。
select * from table_subject order by decode(subject_name, '語文', 1, '數(shù)學(xué)', 2, , '外語',3)(責(zé)任編輯:盧兆林)
最近在項(xiàng)目里用到resin,以前也用過,但記不得是什么版本了,這次可把我給折騰的死了,TNND
我的項(xiàng)目架構(gòu)是struts1.2+spring2+hibername3+eXtremeComponet,用這個(gè)eXtremeComponet的輸出EXCEL或PDF時(shí)必需加filter,在resin-3.2.0、resin-3.1.6、resin-3.1.2下只要加上filter頁面和action之間傳遞的中文就是亂碼,去掉就OK,但又沒了輸出EXCEL或PDF,郁悶呀,后來又換成resin-3.0.26,一試一點(diǎn)問題也沒有,沒時(shí)間搞清是什么問題!只能先讓這個(gè)項(xiàng)目上線再說了,有人知道怎么回,請(qǐng)回復(fù)一下,謝謝
摘自http://m.tkk7.com/zilong/archive/2007/04/04/108415.html
很多網(wǎng)頁都是框架結(jié)構(gòu)的,在很多的情況下會(huì)通過按鈕點(diǎn)擊事件或鏈接,跳出框架轉(zhuǎn)到其它界面。例如說點(diǎn)擊“注銷登錄”返回到登錄界面。
一、通過運(yùn)行腳本跳出框架有以下幾種寫法:
1. <script language = javascript>window.open('Login.aspx','_top')</script>"
2. <script language = javascript>window.open('Login.aspx','_parent')</script>"
3. <script language = javascript>window.parent.location.href='login.aspx'</script>
4. Response.Write("<script>window.parent.opener=null;window.top.close();</script>")
Response.Write("<script>window.open('index.aspx','');</script>")
這種方法會(huì)先關(guān)閉原框架窗口,再重新打開一個(gè)新的窗口。這在很多功能界面對(duì)瀏覽器進(jìn)行了改變?cè)O(shè)置,而回到登陸界面又用缺省設(shè)置的情況下適用。
二、鏈接跳出框架
這種情況就很簡(jiǎn)單了,加上 target="_top" 屬性就可以了。
有時(shí)mysql會(huì)占用過多cpu,解決辦法之一是查看mysql線程的運(yùn)行情況
mysqladmin proc stat
mysqladmin proc stat -i 1 (間隔1s)
mysqladmin kill pid (kill掉死鎖的線程的pid)
注:關(guān)于亂碼問題,在導(dǎo)入導(dǎo)出時(shí)可心加上--character-set=utf8/gbk
1、mysql導(dǎo)出表
/mysqldump -uroot -p -t dbName table -w "order_status=60 and date(init_time) >= '2008-05-01'and date(init_time) < '2008-07-11'" > dbName_table.txt
mysql導(dǎo)出庫
/mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 > 導(dǎo)出的文件名
2、mysql導(dǎo)入
a ./mysql -uroot -p dbName < path/filename.sql
b. mysql>\. /path/filename.sql
mysqldump默認(rèn)是lock-tables的,如果是Innodb加上--single-transaction,其它的存儲(chǔ)引擎加上--skip-lock-tables備份的時(shí)候就不會(huì)鎖表了。