java 日期及别的小技巧
網(wǎng)絡(luò)日志
8月3日
db2數(shù)據(jù)庫(kù)在win2003上的安裝
1。創(chuàng)建數(shù)據(jù)庫(kù)??? 例如:db2 create database [數(shù)據(jù)庫(kù)名稱]using codeset? GBK territory zh_CN
2。數(shù)據(jù)庫(kù)參數(shù)
??? db2 update database cfg for db_name using applheapsz 256? 指定每一單個(gè)代理程序可用的應(yīng)用程序堆的大小(以頁(yè)為單位)。
??? UPDATE DATABASE CONFIGURATION FOR DBNAME USING APP_CTL_HEAP_SZ 256;確定應(yīng)用程序堆的最大大小(以 4 KB 頁(yè)為單位)。為在代表 MPP 或 SMP 系統(tǒng)中節(jié)點(diǎn)上相同應(yīng)用程序的運(yùn)行的代理程序間共享信息時(shí)需要使用堆。如果應(yīng)用程序復(fù)雜將運(yùn)行或者 MPP 配置有大量節(jié)點(diǎn),則應(yīng)增加此堆的大小。
UPDATE DATABASE CONFIGURATION FOR DBNAME USING APPGROUP_MEM_SZ??????? 11595;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING CATALOGCACHE_SZ 260;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING CHNGPGS_THRESH? 60;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING DBHEAP????????? 600;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING LOCKLIST??????? 50;指定分配給鎖列表的存儲(chǔ)器空間數(shù)量。鎖列表包括并行連接到數(shù)據(jù)庫(kù)的所有應(yīng)用程序保留的鎖
UPDATE DATABASE CONFIGURATION FOR DBNAME USING LOGBUFSZ??????? 98;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING LOGFILSIZ?????? 2500;指定分配給用于數(shù)據(jù)恢復(fù)的日志文件的磁盤存儲(chǔ)空間的數(shù)量(以頁(yè)為單位)。該參數(shù)定義每一主日志文件和輔助日志文件的大小。
UPDATE DATABASE CONFIGURATION FOR DBNAME USING LOGPRIMARY????? 3;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING LOGSECOND?????? 4;指定可用于數(shù)據(jù)庫(kù)恢復(fù)的輔助日志文件的數(shù)量。
UPDATE DATABASE CONFIGURATION FOR DBNAME USING MAXAPPLS??????? 250;指定可在同一時(shí)間連接到數(shù)據(jù)庫(kù)的應(yīng)用程序(本地和遠(yuǎn)程)的最大數(shù)量。
UPDATE DATABASE CONFIGURATION FOR DBNAME USING MAXLOCKS??????? 57;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING MINCOMMIT?????? 1;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING NUM_IOCLEANERS? 1;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING NUM_IOSERVERS?? 2;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING PCKCACHESZ????? 915;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING SOFTMAX???????? 120;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING SORTHEAP??????? 214;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING STMTHEAP??????? 2048;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING DFT_DEGREE????? 1;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING DFT_PREFETCH_SZ 32;
UPDATE DATABASE CONFIGURATION FOR DBNAME USING UTIL_HEAP_SZ??? 78735;
UPDATE DATABASE MANAGER CONFIGURATION USING SHEAPTHRES???????? 25797;
UPDATE DATABASE MANAGER CONFIGURATION USING INTRA_PARALLEL???? OFF;
UPDATE DATABASE MANAGER CONFIGURATION USING MAX_QUERYDEGREE??? 1;
UPDATE DATABASE MANAGER CONFIGURATION USING MAXAGENTS????????? 400;
UPDATE DATABASE MANAGER CONFIGURATION USING NUM_POOLAGENTS???? 400;
UPDATE DATABASE MANAGER CONFIGURATION USING NUM_INITAGENTS???? 0;
UPDATE DATABASE MANAGER CONFIGURATION USING FCM_NUM_BUFFERS??? 4096;
UPDATE DATABASE MANAGER CONFIGURATION USING PRIV_MEM_THRESH??????? 32767;
3.可以使用db2set -all 察看系統(tǒng)中設(shè)置的所有配置文件注冊(cè)表變量。
4。db2 -tvf? *.sql? -z? view.txt?? 可以執(zhí)行腳本文件,即輸出到view.txt察看。
5. db2 管理方面的命令
??? list db directory?? 列出系統(tǒng)數(shù)據(jù)庫(kù)目錄
二。數(shù)據(jù)庫(kù)操作的常用技巧
?
?1. 查看本地節(jié)點(diǎn)目錄
命令窗口中輸入:db2 list node directory
2. 編目一個(gè)TCP/IP節(jié)點(diǎn)
命令窗口:db2 catalog tcpip node <node_name> remote <hostname|ip_address> server <svcname|port_number> ostype <OS2|AIX|WIN95|NT|HPUX|SUN|MVS|OS400|VM|VSE|SCO|SGI|LINUX|DYNIX>
3. 取消節(jié)點(diǎn)編目
db2 uncatalog node <node_name>
4. 查看系統(tǒng)數(shù)據(jù)庫(kù)目錄
db2 list database directory
5. 查看本地?cái)?shù)據(jù)庫(kù)目錄
db2 list database directory on <盤符>
在本地?cái)?shù)據(jù)庫(kù)目錄中有而系統(tǒng)數(shù)據(jù)庫(kù)目錄中沒(méi)有的數(shù)據(jù)庫(kù)不能訪問(wèn),可以在控制中心中選中<數(shù)據(jù)庫(kù)>右鍵單擊選擇添加,然后輸入需要添加的數(shù)據(jù)庫(kù)名稱或者點(diǎn)擊刷新按鈕選擇數(shù)據(jù)庫(kù),加入數(shù)據(jù)庫(kù)后即可以訪問(wèn)。
6. 編目數(shù)據(jù)庫(kù)
db2 catalog database <db_name> as <db_alias> at node <node_name>
7. 取消數(shù)據(jù)庫(kù)編目
db2 uncatalog database <db_name>
8. 測(cè)試遠(yuǎn)程數(shù)據(jù)庫(kù)的連接
db2 connect to <db_alias> user <user_id> using <password>
9. 任何用戶均可通過(guò)設(shè)置Current Schema專用寄存器為特定的數(shù)據(jù)庫(kù)連接設(shè)置默認(rèn)模式,初始默認(rèn)值為當(dāng)前會(huì)話用戶的權(quán)限ID。
set schema = <schema name>
可以由用戶交互式的使用,也可在應(yīng)用程序中使用,如果用Dynamicrules Bind選項(xiàng)綁定包,這個(gè)語(yǔ)句就沒(méi)有作用。此語(yǔ)句不在事務(wù)控制之下。
10. 代碼頁(yè)的設(shè)置
在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)設(shè)置字符集
create database <db_name> using codeset <codeset> territory <territiry>
例:
create database dbtest using codeset IBM-437 territory US
也可以設(shè)置整個(gè)數(shù)據(jù)庫(kù)的代碼頁(yè),在win2000/NT/xp中,在我的電腦-->屬性-->高級(jí)-->環(huán)境變量中添加變量DB2CODEPAGE = <codepage>,例:DB2CODEPAGE = 437 或 DB2CODEPAGE = 1386。或者在IBM DB2命令窗口輸入 db2set DB2CODEPAGE=1386,設(shè)置后需要重新啟動(dòng)DB2生效。
11. DB2低版本數(shù)據(jù)到高版本的遷移
先將低版本數(shù)據(jù)備份使用恢復(fù)功能導(dǎo)入高版本數(shù)據(jù)庫(kù),然后在命令窗口輸入 db2 migrate database <db_name>。
12. 表名或模式中含有引號(hào)時(shí)訪問(wèn)表
命令窗口:db2 select * from "tabschema"."tabname"
命令行處理器:db2=> select * from "tabschema"."tabname"
13. 導(dǎo)出數(shù)據(jù)庫(kù)的表結(jié)構(gòu)生成DDL文件
命令窗口:db2look -d <db_name> -e -c -o <file_name>
14. 執(zhí)行腳本文件
命令窗口:db2 -tvf <file_name>
15. 代碼頁(yè)的轉(zhuǎn)換
16. 獲取當(dāng)前DB2的版本
select * from sysibm.sysversions
17. DB2表的字段的修改限制?
只能修改VARCHAR2類型的并且只能增加不能減少
alter table <tb_name> alter column <col_name> set data type varchar(SIZE)
18. 如何查看表的結(jié)構(gòu)?
describe table <tb_name>
or
describe select * from <schema>.<tb_name>
19. 如何快速清除一個(gè)大表?
ALTER TABLE TABLE_NAME ACTIVE NOT LOGGED INITALLY WITH EMPTY TABLE
20. 如何查看數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程?
SELECT * FROM SYSCAT.PROCEDURES
21. 如何查看表的約束?
SELECT * FROM SYSCAT.CHECKS WHERE TABNAME = <tb_name>
22. 如何查看表的引用完整約束?
SELECT * FROM SYSCAT.REFERENCES WHERE TABNAME = <tb_name>
23. 如何知道BUFFERPOOLS狀況?
select * from SYSCAT.BUFFERPOOLS
24. 如何在命令行下查看修改實(shí)例和數(shù)據(jù)庫(kù)配置參數(shù)?
查看實(shí)例配置參數(shù): db2 get dbm cfg
修改實(shí)例配置參數(shù): db2 update dbm cfg using 參數(shù)名 新值
查看數(shù)據(jù)庫(kù)配置參數(shù): db2 get db cfg for <db_name>
修改數(shù)據(jù)庫(kù)配置參數(shù): db2 update db cfg for <db_name> using 參數(shù)名 新值
25. 如何修改緩沖區(qū)?
增加緩沖區(qū): create bufferpool <buf_name> size <number of pages> [pagesize 4096] {[not] EXTENDED STORAGE}
修改緩沖區(qū): alter bufferpool <buf_name> size <number of pages> {[not] EXTENDED STORAGE}
刪除緩沖區(qū): drop bufferpool <buf_name>
如果緩沖區(qū)大小設(shè)置為 -1 表示緩沖池的頁(yè)面數(shù)目由數(shù)據(jù)庫(kù)配置參數(shù)buffpage決定。
注意: 數(shù)據(jù)庫(kù)配置參數(shù)buffpage僅對(duì)緩沖區(qū)大小設(shè)置為 -1 的緩沖池起作用。
26. 多個(gè)字段時(shí)如何不通過(guò)使用select子句使用in/not in
select * from tabschema.tabname where (colA, colB, colC) [not] in (values (valueA1, valueB1, valueC1), (valueA2, valueB2, valueC2), ...(valueAn, valueBn, valueCn))
27. 查看當(dāng)前連接到數(shù)據(jù)庫(kù)的應(yīng)用
db2 list application [show detail]
28. 如何確認(rèn)DB2數(shù)據(jù)庫(kù)的一致性
db2dart <db_name> /DB
/DB表示檢查整個(gè)數(shù)據(jù)庫(kù)的一致性
29. 測(cè)試SQL語(yǔ)句的性能
db2batch -d <db_name> -f <file_name> [-a userid/passwd] [-r <outfile_name>]
-r 選項(xiàng)表示將查詢結(jié)果輸出到一個(gè)文件中。
30. 導(dǎo)出某個(gè)表的數(shù)據(jù)
export to <Derectry><filme>
如:導(dǎo)出用戶表
export to c:user.ixf of ixf select * from user
31. 導(dǎo)入數(shù)據(jù)
import from
如:導(dǎo)入用戶表。導(dǎo)入時(shí)可以直接建立新表。如果有該表存在也可以用INSERT 插入,或者用UPDATE更新
import from c:user.ixf of ixf [Create/Insert into / update] tablename
。。。。。。。。。。。。。。未完待續(xù)
13:44 添加評(píng)論 固定鏈接 引用通告 (0) 記錄它 計(jì)算機(jī)與 Internet
固定鏈接http://hahayang.spaces.live.com/blog/cns!C99CA57DBFEB25E0!152.entry
添加評(píng)論正在做oracle向db2數(shù)據(jù)庫(kù)移植總結(jié)一些經(jīng)驗(yàn)
1、創(chuàng)建PROCEDURE的參數(shù)的區(qū)別
??????? 1)參數(shù)類型和參數(shù)名稱的位置不同
??????????? db2:??? CREATE PROCEDURE PRO1 (IN OrgID int)
??????????? oracle:CREATE PROCEDURE PRO1 (OrgID IN int)
??????? 2)同時(shí)作為輸入輸出參數(shù)的寫法不同
??????????? db2:??? CREATE PROCEDURE PRO1 (INOUT OrgID int)??? INOUT連著寫
??????????? oracle:CREATE PROCEDURE PRO1 (OrgID IN OUT int)??? IN OUT中間空格隔開,而且必須IN在OUT之前
??????? 3)沒(méi)有輸入或輸出參數(shù)時(shí)
??????????? db2:??? CREATE PROCEDURE PRO1 ()????
??????????? oracle:CREATE PROCEDURE PRO1 不能有空的括號(hào)
?????? 4)賦值語(yǔ)句寫法不一樣
?????????? db2:??? set var =..
????????? oracle:? var := ..
????? 5)異常處理不一樣
????????? db2: 異常處理器類型(handler-type)有以下幾種:
CONTINUE 在處理器操作完成之后,會(huì)繼續(xù)執(zhí)行產(chǎn)生這個(gè)異常語(yǔ)句之后的下一條語(yǔ)句。
EXIT 在處理器操作完成之后,存儲(chǔ)過(guò)程會(huì)終止,并將控制返回給調(diào)用者。
UNDO 在處理器操作執(zhí)行之前,DB2會(huì)回滾存儲(chǔ)過(guò)程中執(zhí)行的SQL操作。在處理器操作完成之后,存儲(chǔ)過(guò)程會(huì)終止,并將控制返回給調(diào)用者。
異常處理器可以處理基于特定SQLSTATE值的定制異常,或者處理預(yù)定義異常的類。預(yù)定義的3種異常如下所示:
NOT FOUND 標(biāo)識(shí)導(dǎo)致SQLCODE值為+100或者SQLSATE值為02000的異常。這個(gè)異常通常在SELECT沒(méi)有返回行的時(shí)候出現(xiàn)。
SQLEXCEPTIOIN 標(biāo)識(shí)導(dǎo)致SQLCODE值為負(fù)的異常。
SQLWARNING 標(biāo)識(shí)導(dǎo)致警告異常或者導(dǎo)致+100以外的SQLCODE正值的異常。
如果產(chǎn)生了NOT FOUND 或者SQLWARNING異常,并且沒(méi)有為這個(gè)異常定義異常處理器,那么就會(huì)忽略這個(gè)異常,并且將控制流轉(zhuǎn)向下一個(gè)語(yǔ)句。如果產(chǎn)生了SQLEXCEPTION異常,并且沒(méi)有為這個(gè)異常定義異常處理器,那么存儲(chǔ)過(guò)程就會(huì)失敗,并且會(huì)將控制流返回調(diào)用者。
以下示例聲明了兩個(gè)異常處理器。 EXIT處理器會(huì)在出現(xiàn)SQLEXCEPTION 或者SQLWARNING異常的時(shí)候被調(diào)用。EXIT處理器會(huì)在終止SQL程序之前,將名為stmt的變量設(shè)為"ABORTED",并且將控制流返回給調(diào)用者。UNDO處理器會(huì)將控制流返回給調(diào)用者之前,回滾存儲(chǔ)過(guò)程體中已經(jīng)完成的SQL操作。
oracle: EXCEPTION
? ----錯(cuò)誤處理
? WHEN DUP_VAL_ON_INDEX THEN
??? ----主鍵沖突
??? ROLLBACK;
? WHEN VALUE_ERROR THEN
??? ----長(zhǎng)度截?cái)噱e(cuò)誤
??? ROLLBACK;
? WHEN PROGRAM_ERROR THEN
??? ----PL/SQL內(nèi)部錯(cuò)誤
??? ROLLBACK;
? WHEN TIMEOUT_ON_RESOURCE THEN
??? ----系統(tǒng)等待超時(shí)
????? ROLLBACK;
? WHEN OTHERS THEN
??? ----其他異常錯(cuò)誤
??? ROLLBACK;
2 自定義函數(shù)例子
類似oracle 的 to_date() 日期函數(shù)
CREATE FUNCTION DB2ADMIN.TO_DATE_EX
?(INPUTDATE VARCHAR(20),
? FORMAT VARCHAR(20)
?)
? RETURNS TIMESTAMP
? SPECIFIC DB2ADMIN.SQL060801174720700
? LANGUAGE SQL
? NOT DETERMINISTIC
? READS SQL DATA
? STATIC DISPATCH
? CALLED ON NULL INPUT
? EXTERNAL ACTION
? INHERIT SPECIAL REGISTERS
? RETURN
with tmp (outdate) as (
? select
????? case length(rtrim(INPUTDATE))
??????? when 10
????????? then timestamp(inputdate || ' 00:00:00')
??????? when 19
????????? then timestamp(inputdate)
????? end
??? from sysibm.sysdummy1 )
? select outdate
??? from tmp;
12:27 添加評(píng)論 固定鏈接 引用通告 (0) 記錄它 愛(ài)好
固定鏈接http://hahayang.spaces.live.com/blog/cns!C99CA57DBFEB25E0!151.entry
添加評(píng)論6月21日
jsp中的日期問(wèn)題及其它:D :D :D
jsp中的日期問(wèn)題及其它:D :D :D
/**
* @author imagebear
*/
日期問(wèn)題
1、獲取服務(wù)器端當(dāng)前日期:
?
<%@ page import="java.util.Date"%>
<%
Date myDate = new Date();
%>
2、獲取當(dāng)前年、月、日:
?
<%@ page import="java.util.Date"%>
<%
Date myDate = new Date();
int thisYear = myDate.getYear() + 1900;//thisYear = 2003
int thisMonth = myDate.getMonth() + 1;//thisMonth = 5
int thisDate = myDate.getDate();//thisDate = 30
%>
3、按本地時(shí)區(qū)輸出當(dāng)前日期
?
<%@ page import="java.util.Date"%>
<%
Date myDate = new Date();
out.println(myDate.toLocaleString());
%>
輸出結(jié)果為:
2003-5-30
4、獲取數(shù)據(jù)庫(kù)中字段名為”publish_time“、類型為Datetime的值
?
<%@ page import="java.util.Date"%>
<%
...連接數(shù)據(jù)庫(kù)...
ResultSet rs = ...
Date sDate = rs.getDate("publish_time");
%>
[code]
5、按照指定格式打印日期
[code]
<%@ page import="java.util.Date"%>
<%@ page import="java.text.DateFormat"%>
<%
Date dNow = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
out.println("It is " + formatter.format(dNow));
%>
輸出的結(jié)果為:
It is 星期五 2003.05.30 at 11:30:46 上午 CST
(更為詳盡的格式符號(hào)請(qǐng)參看SimpleDateFormat類)
6、將字符串轉(zhuǎn)換為日期
?
<%@ page import="java.util.Date"%>
<%@ page import="java.text.DateFormat"%>
<%
String input = "1222-11-11";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date t = null;
try{
t = formatter.parse(input);
out.println(t);
}catch(ParseException e){
out.println("unparseable using " + formatter);
}
%>
輸出結(jié)果為:
Fri Nov 11 00:00:00 CST 1222
7、計(jì)算日期之間的間隔
?
<%@ page import="java.util.Date"%>
<%@ page import="java.text.DateFormat"%>
<%
String input = "2003-05-01";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = null;
try{
d1 = formatter.parse(input);
}catch(ParseException e){
out.println("unparseable using " + formatter);
}
Date d2 = new Date();
long diff = d2.getTime() - d1.getTime();
out.println("Difference is " + (diff/(1000*60*60*24)) + " days.");
%>
輸出結(jié)果為:
Difference is 29 days.
8、日期的加減運(yùn)算
方法:用Calendar類的add()方法
?
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%
Calendar now = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
out.println("It is now " + formatter.format(now.getTime()));
now.add(Calendar.DAY_OF_YEAR,-(365*2));
out.println("<br>");
out.println("Two years ago was " + formatter.format(now.getTime()));
%>
輸出結(jié)果為:
It is now 星期五 2003.05.30 at 01:45:32 下午 CST
Two years ago was 星期三 2001.05.30 at 01:45:32 下午 CST
9、比較日期
方法:用equals()、before()、after()方法
?
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%
DateFormat df = new SimpleDateFormat("yyy-MM-dd");
Date d1 = df.parse("2000-01-01");
Date d2 = df.parse("1999-12-31");
String relation = null;
if(d1.equals(d2))
relation = "the same date as";
else if(d1.before(d2))
relation = "before";
else
relation = "after";
out.println(d1 +" is " + relation + ' ' + d2);
%>
輸出結(jié)果為:
Sat Jan 01 00:00:00 CST 2000 is after Fri Dec 31 00:00:00 CST 1999
10、記錄一件事所花費(fèi)的時(shí)間
方法:調(diào)用兩次System.getTimeMillis()方法,求差值
?
<%@ page import="java.text.*"%>
<%
long t0,t1;
t0 = System.currentTimeMillis();
out.println("Cyc starts at " + t0);
int k = 0;
for(int i =0;i<100000;i++){
k += i;
}
t1 = System.currentTimeMillis();
out.println("<br>");
out.println("Cyc ends at " + t1);
out.println("<br>");
out.println("This run took " + (t1-t0) + "ms.");
%>
輸出結(jié)果為:
Cyc starts at 1054275312432
Cyc ends at 1054275312442
This run took 10ms.
其它:如何格式化小數(shù)
?
<%@ page import="java.text.*"%>
<%
DecimalFormat df = new DecimalFormat(",###.00");
double aNumber = 33665448856.6568975;
String result = df.format(aNumber);
out.println(result);
%>
輸出結(jié)果為:
33,665,448,856.66
10:33 添加評(píng)論 固定鏈接 引用通告 (0) 記錄它 計(jì)算機(jī)與 Internet
固定鏈接http://hahayang.spaces.live.com/blog/cns!C99CA57DBFEB25E0!138.entry
添加評(píng)論5月27日
設(shè)計(jì)模式之父談如何使用設(shè)計(jì)模式
在接受Artima.com的采訪時(shí),《設(shè)計(jì)模式》的作者Erich Gamma介紹了如何正確地使用設(shè)計(jì)模式。
設(shè)計(jì)模式(design pattern)一直是一個(gè)開發(fā)者中間流行的話題,借助于它開發(fā)者可以更好地思考設(shè)計(jì)問(wèn)題。但怎樣才是思考設(shè)計(jì)模式的正確方式?在接受Artima.com的采訪時(shí),經(jīng)典著作《設(shè)計(jì)模式》一書的作者之一Erich Gamma介紹了自己的經(jīng)驗(yàn)。
全文請(qǐng)看:http://www.artima.com/lejava/articles/gammadp.html
15:56 添加評(píng)論 閱讀評(píng)論 (1) 固定鏈接 引用通告 (0) 記錄它 愛(ài)好
固定鏈接http://hahayang.spaces.live.com/blog/cns!C99CA57DBFEB25E0!137.entry
添加評(píng)論5月24日
如何把數(shù)據(jù)寫到excel文件中
jxl的一些總結(jié)
要往xls文件里面寫入數(shù)據(jù)的時(shí)候需要注意的是第一要新建一個(gè)xls文件
OutputStream os=new FileOutputStream("c:\\excel2.xls");
再建完這個(gè)文件的時(shí)候再建立工作文件
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(os));
如果這個(gè)文件已經(jīng)存在,那么我們可以在這個(gè)文件里面加入一個(gè)sheet為了和以前的數(shù)據(jù)進(jìn)行分開;
jxl.write.WritableSheet ws = wwb.createSheet("Test Sheet 1", 0);
在createSheet方法里前面的參數(shù)是sheet名,后面是要操作的sheet號(hào)
接下來(lái)就可以往這個(gè)文件里面寫入數(shù)據(jù)了
寫入數(shù)據(jù)的時(shí)候注意的格式
(1)添加的字體樣式
jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);
WritableFont()方法里參數(shù)說(shuō)明:
這個(gè)方法算是一個(gè)容器,可以放進(jìn)去好多屬性
第一個(gè): TIMES是字體大小,他寫的是18
第二個(gè): BOLD是判斷是否為斜體,選擇true時(shí)為斜體
第三個(gè): ARIAL
第四個(gè): UnderlineStyle.NO_UNDERLINE 下劃線
第五個(gè): jxl.format.Colour.RED 字體顏色是紅色的
jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell",wcfF);
ws.addCell(labelC);
在Label()方法里面有三個(gè)參數(shù)
第一個(gè)是代表列數(shù),
第二是代表行數(shù),
第三個(gè)代表要寫入的內(nèi)容
第四個(gè)是可選項(xiàng),是輸入這個(gè)label里面的樣式
然后通過(guò)寫sheet的方法addCell()把內(nèi)容寫進(jìn)sheet里面。
(2)添加帶有formatting的Number對(duì)象
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
(3)添加Number對(duì)象
(3.1)顯示number對(duì)象數(shù)據(jù)的格式
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);
jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);
ws.addCell(labelNF);
Number()方法參數(shù)說(shuō)明:
前兩上表示輸入的位置
第三個(gè)表示輸入的內(nèi)容
(4)添加Boolean對(duì)象
jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);
ws.addCell(labelB);
(5)添加DateTime對(duì)象
jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
ws.addCell(labelDT);
DateTime()方法的參數(shù)說(shuō)明
前兩個(gè)表示輸入的位置
第三個(gè)表示輸入的當(dāng)前時(shí)間
(6)添加帶有formatting的DateFormat對(duì)象
這個(gè)顯示當(dāng)前時(shí)間的所有信息,包括年月日小時(shí)分秒
jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss");
jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, new java.util.Date(), wcfDF);
ws.addCell(labelDTF);
(7)添加帶有字體顏色Formatting的對(duì)象
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
import="jxl.format.*
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL,20,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.GREEN);
(8)設(shè)置單元格樣式
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
wcfFC.setBackGround(jxl.format.Colour.RED);//設(shè)置單元格的顏色為紅色
wcfFC = new jxl.write.Label(6,0,"i love china",wcfFC);
15:44 添加評(píng)論 固定鏈接 引用通告 (0) 記錄它 計(jì)算機(jī)與 Internet
固定鏈接http://hahayang.spaces.live.com/blog/cns!C99CA57DBFEB25E0!136.entry
添加評(píng)論5月23日
cvs應(yīng)用指南
CVS 是 Concurrent Version System(并行版本系統(tǒng))談 羽斌 整理? (參與分:938,專家分:105)?? 發(fā)表:2005-05-23 12:00?? 版本:1.0?? 閱讀:7次
CVS 是 Concurrent Version System(并行版本系統(tǒng))的縮寫,用于版本管理。在多人團(tuán)隊(duì)開發(fā)中的作用更加明顯。CVS 的基本工作思路是這樣的:在一臺(tái)服務(wù)器上建立一個(gè)倉(cāng)庫(kù),倉(cāng)庫(kù)里可以存放許多不同項(xiàng)目的源程序。由倉(cāng)庫(kù)管理員統(tǒng)一管理這些源程序。這樣,就好象只有一個(gè)人在修改文件一樣。避免了沖突。每個(gè)用戶在使用倉(cāng)庫(kù)之前,首先要把倉(cāng)庫(kù)里的項(xiàng)目文件下載到本地。用戶做的任何修改首先都是在本地進(jìn)行,然后用 cvs 命令進(jìn)行提交,由 cvs 倉(cāng)庫(kù)管理員統(tǒng)一 修改。這樣就可以做到跟蹤文件變化,沖突控制等等。
由于CVS是建立在在原先 Unix 體系里很成熟的 SCCS 和 RCS 的基礎(chǔ)上,所以CVS多是Linux(UNIX)系統(tǒng)中所使用,本文中服務(wù)器端設(shè)置也是以Linux為例。
一、CVS服務(wù)器的安裝
首先確認(rèn)系統(tǒng)中是否安裝CVS服務(wù):
[root@localhost /]# rpm -qa|grep cvs
cvs-1.11.2-cvshome.7x.1
如果命令輸出類似于上面的輸出則說(shuō)明系統(tǒng)已經(jīng)安裝有cvs,否則就需要從安裝光盤中安裝cvs的rpm包,或者到http://www.cvshome.org下載。
1、建立 CVSROOT
目錄,因?yàn)檫@里涉及到用戶對(duì)CVSROOT里的文件讀寫的權(quán)限問(wèn)題,所以比較簡(jiǎn)單的方法是建立一個(gè)組,然后再建立一個(gè)屬于該組的帳戶,而且以后有讀寫權(quán)限的用戶都要屬于該組。假設(shè)我們建一個(gè)組叫cvs,用戶名是cvsroot。建組和用戶的命令如下
#groupadd cvs
#adduser cvsroot
生成的用戶宿主目錄在/home/cvsroot(根據(jù)自己的系統(tǒng)調(diào)整)
2、用cvsroot 用戶登陸,修改 /home/cvsroot (CVSROOT)的權(quán)限,賦與同組人有讀寫的權(quán)限:
$chmod 771 . (或者770應(yīng)該也可以)
注意:這一部分工作是按照文檔說(shuō)明做的,是否一定需要這樣沒(méi)有試驗(yàn),我會(huì)在做試驗(yàn)后在以后版本的教程說(shuō)得仔細(xì)一點(diǎn)。如果您有這方面的經(jīng)驗(yàn)請(qǐng)?zhí)峁┙o我,謝謝。
3、建立CVS倉(cāng)庫(kù),(仍然是 cvsroot 用戶),用下面命令:
$cvs -d /home/cvsroot init
4、以root身份登陸,修改 /etc/inetd.conf(使用 xinetd 的系統(tǒng)沒(méi)有此文件)和 /etc/services
如果用的是 inetd 的系統(tǒng),在 /etc/inetd.conf 里加入:
cvsserver stream tcp nowait root /usr/bin/cvs cvs -f --allow-root=/home/cvsroot pserver
說(shuō)明:上面的行是單獨(dú)一整行,/usr/bin/cvs 應(yīng)該是你的cvs版本的命令路徑,請(qǐng)根據(jù)自己的系統(tǒng)調(diào)整./home/cvsroot是你建立的CVSROOT的路徑,也請(qǐng)根據(jù)上面建立目錄的部分的內(nèi)容做調(diào)整。
如果是使用 xinetd 的系統(tǒng),需要在 /etc/xinetd.d/ 目錄下創(chuàng)建文件 cvspserver(此名字可以自己定義),內(nèi)容如下:
# default: on
# description: The cvs server sessions;
service cvsserver
{
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/cvsroot pserver
log_on_failure += USERID
only_from = 192.168.0.0/24
}
其中only_from是用來(lái)限制訪問(wèn)的,可以根據(jù)實(shí)際情況不要或者修改。修改該文件權(quán)限:
# chmod 644 cvspserver
在/etc/services里加入:
cvsserver 2401/tcp
說(shuō)明:cvsserver 是任意的名稱,但是不能和已有的服務(wù)重名,也要和上面修改 /etc/inetd.conf 那行的第一項(xiàng)一致。
5、添加可以使用 CVS 服務(wù)的用戶到 cvs 組:
以 root 身份修改 /etc/group,把需要使用 CVS 的用戶名加到 cvs 組里,比如我想讓用戶 laser 和gumpwu 能夠使用 CVS 服務(wù),那么修改以后的 /etc/group 應(yīng)該有下面這樣一行:
cvs:x:105:laser,gumpwu
在你的系統(tǒng)上GID可能不是105,沒(méi)有關(guān)系。主要是要把laser和gumpwu用逗號(hào)分隔開寫在最后一個(gè)冒號(hào)后面。當(dāng)然,象RedHat等分發(fā)版有類似linuxconf這樣的工具的話,用工具做這件事會(huì)更簡(jiǎn)單些。
6、重起inetd使修改生效:
#killall -HUP inetd
如果使用的是 xinetd 的系統(tǒng):
# /etc/rc.d/init.d/xined restart
然后察看cvs服務(wù)器是否已經(jīng)運(yùn)行:
[root@localhost /]# netstat -lnp|grep 2401
tcp 0 0 0.0.0.0:2401 0.0.0.0:* LISTEN 1041/xinetd
則說(shuō)明cvs服務(wù)器已經(jīng)運(yùn)行。
二、管理CVS服務(wù)器
服務(wù)器可以用了,現(xiàn)在大家最關(guān)心的就是如何管理服務(wù)器,比如,我想讓一些人有讀和/或?qū)?CVS 倉(cāng)庫(kù)的權(quán)限,但是不想給它系統(tǒng)權(quán)限怎么辦呢?
不難,在 cvs 管理員用戶(在我這里是 cvsroot 用戶)的家目錄里有一個(gè) CVSROOT 目錄,這個(gè)目錄里有三個(gè)配置文件,passwd, readers, writers,我們可以通過(guò)設(shè)置這三個(gè)文件來(lái)配置 CVS 服務(wù)器,下面分別介紹這幾個(gè)文件的作用:
passwd:cvs 用戶的用戶列表文件,它的格式很象 shadow 文件:
{cvs 用戶名}:[加密的口令]:[等效系統(tǒng)用戶名]
如果你希望一個(gè)用戶只是 cvs 用戶,而不是系統(tǒng)用戶,那么你就要設(shè)置這個(gè)文件,剛剛安裝完之后這個(gè)文件可能不存在,你需要以 cvs 管理員用戶手工創(chuàng)建,當(dāng)然要按照上面格式,第二個(gè)字段是該用戶的加密口令,就是用 crypt (3)加密的,你可以自己寫一個(gè)程序來(lái)做加密,也可以用我介紹的偷懶的方法:先創(chuàng)建一個(gè)系統(tǒng)用戶,名字和 cvs 用戶一樣,口令就是準(zhǔn)備給它的 cvs 用戶口令,創(chuàng)建完之后從 /etc/shadow 把該用戶第二個(gè)字段拷貝過(guò)來(lái),然后再把這個(gè)用戶刪除。這個(gè)方法對(duì)付數(shù)量少的用戶比較方便,人一多就不合適了,而且還有沖突條件(race condition)的安全隱患,還要 root 權(quán)限,實(shí)在不怎么樣。不過(guò)權(quán)益之計(jì)而已。寫一個(gè)小程序并不難,可以到 linuxforum 的編程版搜索一下,有個(gè)朋友已經(jīng)寫了一個(gè)貼在上面了。
第三個(gè)字段就是等效系統(tǒng)用戶名,實(shí)際上就是賦與一個(gè) cvs 用戶一個(gè)等效的系統(tǒng)用戶的權(quán)限,看下面的例子你就明白它的功能了。
readers:有 cvs 讀權(quán)限的用戶列表文件。就是一個(gè)一維列表。在這個(gè)文件中的用戶對(duì) cvs只有讀權(quán)限。
writers:有 cvs 寫權(quán)限的用戶的列表文件。和 readers 一樣,是一個(gè)一維列表。在這個(gè)文件中的用戶對(duì) cvs 有寫權(quán)限。
上面三個(gè)文件在缺省安裝的時(shí)候可能都不存在,需要我們自己創(chuàng)建,好吧,現(xiàn)在還是讓我們用一個(gè)例子來(lái)教學(xué)吧。假設(shè)我們有下面幾個(gè)用戶需要使用 cvs:
laser, gumpwu, henry, betty, anonymous。
其中 laser 和 gumpwu 是系統(tǒng)用戶,而 henry, betty, anonymous 我們都不想給系統(tǒng)用戶權(quán)限,并且 betty 和 anonymous 都是只讀用戶,而且 anonymous 更是連口令都沒(méi)有。那么好,我們先做一些準(zhǔn)備工作,先創(chuàng)建一個(gè) cvspub 用戶,這個(gè)用戶的責(zé)任是代表所有非系統(tǒng)用戶的 cvs 用戶讀寫 cvs 倉(cāng)庫(kù)。
#adduser
...
然后編輯 /etc/group,令 cvspub 用戶在 cvs 組里,同時(shí)把其它有系統(tǒng)用戶權(quán)限的用戶加到 cvs 組里。(見(jiàn)上文)
然后編輯 cvs 管理員家目錄里 CVSROOT/passwd 文件,加入下面幾行:
laser:$xxefajfka;faffa33:cvspub
gumpwu:$ajfaal;323r0ofeeanv:cvspub
henry:$fajkdpaieje:cvspub
betty:fjkal;ffjieinfn/:cvspub
anonymous::cvspub
注意:上面的第二個(gè)字段(分隔符為 :)是密文口令,你要用程序或者用我的土辦法生成。
編輯 readers 文件,加入下面幾行:
anonymous
betty
編輯 writers 文件,加入下面幾行:
laser
gumpwu
henry
注意:writers中的用戶不能在readers中,要不然不能上傳更新文件。
對(duì)于使用CVS的用戶要修改它的環(huán)境變量,例如laser用戶的環(huán)境變量,打開/home/laser(laser的宿主目錄)下的.bash_profile文件,加入
CVSROOT=/home/cvsroot
export CVSROOT
用laser登陸就可以建立CVS項(xiàng)目,如果要root使用,可以修改/etc/profile文件。
現(xiàn)在我們各項(xiàng)都設(shè)置好了,那么怎么用呢,我在這里寫一個(gè)最簡(jiǎn)單的(估計(jì)也是最常用的)命令介紹:
首先,建立一個(gè)新的CVS項(xiàng)目,一般我們都已經(jīng)有一些項(xiàng)目文件了,這樣我們可以用下面步驟生成一個(gè)新的CVS項(xiàng)目:
進(jìn)入到你的已有項(xiàng)目的目錄,比如叫 cvstest:
$cd cvstest
運(yùn)行命令:
$cvs import -m "this is a cvstest project" cvstest v_0_0_1 start
說(shuō)明:import 是cvs的命令之一,表示向cvs倉(cāng)庫(kù)輸入項(xiàng)目文件。 -m參數(shù)后面的字串是描述文本,隨便寫些有意義的東西,如果不加 -m 參
數(shù),那么cvs會(huì)自動(dòng)運(yùn)行一個(gè)編輯器(一般是vi,但是可以通過(guò)修改環(huán)境變量EDITOR來(lái)改成你喜歡用的編輯器。)讓你輸入信息,cvstest 是項(xiàng)目名稱(實(shí)際上是倉(cāng)庫(kù)名,在CVS服務(wù)器上會(huì)存儲(chǔ)在以這個(gè)名字命名的倉(cāng)庫(kù)里。)
v_0_0_1是這個(gè)分支的總標(biāo)記。沒(méi)啥用(或曰不常用。)
start 是每次 import 標(biāo)識(shí)文件的輸入層次的標(biāo)記,沒(méi)啥用。
這樣我們就建立了一個(gè)CVS倉(cāng)庫(kù)了。
建立CVS倉(cāng)庫(kù)的文件夾應(yīng)該是“干凈”的文件夾,即只包括源碼文件和描述的文件加,而不應(yīng)該包括編譯過(guò)的文件代碼等!
三、使用CVS
winCVS是一個(gè)很好的CVS客戶端軟件,在http://cnpack.cosoft.org.cn/down/wincvsdailyguide.pdf可以下載到這個(gè)軟件的使用手冊(cè)。這里不在贅述了。
四、用CVS管理項(xiàng)目
本人正在一加公司從事該公司ERP項(xiàng)目的開發(fā),在沒(méi)有使用CVS的時(shí)候,多次出現(xiàn)了由于不同的開發(fā)人員修改同一程序,而導(dǎo)致程序錯(cuò)誤,解決版本控制問(wèn)題迫在眉睫。
由于這個(gè)項(xiàng)目采用Linux平臺(tái)下JAVA開發(fā),使用的開發(fā)工具Jbulider是支持CVS進(jìn)行項(xiàng)目管理的,作為主程序員,我決定采用CVS進(jìn)行版本控制,首先參照上文在Linux服務(wù)器上建立了CVS服務(wù),然后我把我本地的工程文件傳至服務(wù)器。
例如:我的工程文件在F:\ERP下,我把ERP下的erp.jpx文件、defaultroot文件夾和src文件夾上傳至服務(wù)器/usr/local/erp下,然后登陸Linux服務(wù)器,登陸的用戶是CVS的用戶,其環(huán)境變量要正確(我的用戶名為admin)
#cd /usr/local/erp
#cvs import -m "this is a ERP project" erp v_0_0_1 start
這樣名為erp的CVS倉(cāng)庫(kù)就建立了。
之后開發(fā)小組的成員可以用winCVS把該項(xiàng)目下載到本地:
打開winCVS
點(diǎn)擊工具欄Create -> Create a new repository... 彈出窗口
在Grenral中
Enter the CVSROOT填寫admin@192.168.1.9:/home/cvsroot 其中admin是cvs的用戶,在本例中admin也是linux的系統(tǒng)用戶,192.168.1.9是服務(wù)器的地址,/home/cvsroot是CVS的主目錄,參考上文。
Authentication中選擇"passwd file on the cvs server"
Use version中選擇cvs 1.10 (Standard)
其它項(xiàng)默認(rèn)即可。
確認(rèn)后,點(diǎn)工具欄Admin --> Login... 會(huì)提示輸入密碼,輸入密碼后,看看winCvs的狀態(tài)欄。如果提示
*****CVS exited normally with code 0*****
表示登錄正常。
點(diǎn)擊工具欄Create --> Checkout module...彈出對(duì)話框,其中的Checkout settings項(xiàng)中
Enter the module name and path on the server 填寫erp,即我們建立的名為erp的CVS倉(cāng)庫(kù)
Local folder to checkout to 選擇要下載到本地的目錄,我選了F:\myerp
其它項(xiàng)目可以默認(rèn),確定后就可以下載到本地了,在F:\myerp\下會(huì)有一個(gè)erp文件夾,其文件結(jié)構(gòu)和F:\erp下的文件結(jié)構(gòu)是一樣的。
用Jbulider打開F:\myerp\erp\下的erp.jpx文件,這個(gè)工程文件就可以使用了。
在Jbuilder的工具欄Team --> Select Project VCS 彈出對(duì)話框,選擇CVS
對(duì)于你要進(jìn)行修改的文件,在Project View中點(diǎn)中該文件,然后點(diǎn)右鍵,探出快捷菜單,選擇CVS --> CVS Edit "xxxx.java(文件名)"
第一次使用可能會(huì)提示CVS服務(wù)器的密碼。
在修改之前還要選擇CVS --> Update "xxxx.java(文件名)"
修改之后選擇CVS --> Commit "xxxx.java(文件名)"
這樣,修改的文件就保存到CVS服務(wù)器了,Update的目的是下載、比較文件。每次在修改之前都Update,保持最新版本。
CVS在項(xiàng)目管理使用中確實(shí)起到了良好的效果,仔細(xì)研究CVS的命令,可以更好的發(fā)揮CVS在版本控制上的能力。
13:45 添加評(píng)論 固定鏈接 引用通告 (0) 記錄它 計(jì)算機(jī)與 Internet
固定鏈接http://hahayang.spaces.live.com/blog/cns!C99CA57DBFEB25E0!133.entry
添加評(píng)論5月20日
JAVA開發(fā)者應(yīng)該去的20個(gè)英文網(wǎng)站-轉(zhuǎn)貼
[http://www.javaalmanac.com] - Java開發(fā)者年鑒一書的在線版本. 要想快速查到某種Java技巧的用法及示例代碼, 這是一個(gè)不錯(cuò)的去處.
[http://www.onjava.com] - O'Reilly的Java網(wǎng)站. 每周都有新文章.
[http://java.sun.com] - ;官方的Java開發(fā)者網(wǎng)站 - 每周都有新文章發(fā)表.
[http://www.developer.com/java] - ;由Gamelan.com 維護(hù)的Java技術(shù)文章網(wǎng)站.
[http://www.java.net] - Sun公司維護(hù)的一個(gè)Java社區(qū)網(wǎng)站.
[http://www.builder.com] - Cnet的Builder.com網(wǎng)站 - 所有的技術(shù)文章, 以Java為主.
[http://www.ibm.com/developerworks/java] - IBM的Developerworks技術(shù)網(wǎng)站; 這是其中的Java技術(shù)主頁(yè).
[http://www.javaworld.com] - ;最早的一個(gè)Java站點(diǎn). 每周更新Java技術(shù)文章.
[http://www.devx.com/java] - DevX維護(hù)的一個(gè)Java技術(shù)文章網(wǎng)站.
[http://www.fawcette.com/javapro] - JavaPro在線雜志網(wǎng)站.
[http://www.sys-con.com/java] - Java Developers Journal的在線雜志網(wǎng)站.
[http://www.javadesktop.org] - ;位于Java.net的一個(gè)Java桌面技術(shù)社區(qū)網(wǎng)站.
[http://www.theserverside.com] - ;這是一個(gè)討論所有Java服務(wù)器端技術(shù)的網(wǎng)站.
[http://www.jars.com] - ;提供Java評(píng)論服務(wù). 包括各種framework和應(yīng)用程序.
[http://www.jguru.com] - ;一個(gè)非常棒的采用Q&A形式的Java技術(shù)資源社區(qū).
[http://www.javaranch.com] - ;一個(gè)論壇,得到Java問(wèn)題答案的地方,初學(xué)者的好去處。
[http://www.ibiblio.org/javafaq/javafaq.html] - comp.lang.java的FAQ站點(diǎn) - 收集了來(lái)自comp.lang.java新聞組的問(wèn)題和答案的分類目錄.
http://java.sun.com/docs/books/tutorial/] - ;來(lái)自SUN公司的官方Java指南 - 對(duì)于了解幾乎所有的java技術(shù)特性非常有幫助.
http://www.javablogs.com] - ;互聯(lián)網(wǎng)上最活躍的一個(gè)Java Blog網(wǎng)站.
http://java.about.com/] - ;來(lái)自About.com的Java新聞和技術(shù)文章網(wǎng)站.
?
轉(zhuǎn)載于:https://www.cnblogs.com/subiaoji/archive/2006/08/22/483495.html
總結(jié)
以上是生活随笔為你收集整理的java 日期及别的小技巧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 微軟平台的管理專家 - Microsof
- 下一篇: 生活象一碗白菜汤