• ASSOC
    顯示或修改檔案附檔名關聯。
  • AT
    排定電腦上要執行的命令和程式。
  • ATTRIB
    顯示或變更檔案屬性。
  • BREAK
    設定或清除擴充的CTRL+C檢查。
  • CACLS
    顯示或修改檔案的存取控制清單(ACLs)。
  • CALL
    從另一個批次程式呼叫一個批次程式。
  • CD
    顯示目前目錄的名稱或變更。
  • CHCP
    顯示或設定作用中的字碼編號。
  • CHDIR
    顯示目前目錄的名稱或變更。
  • CHKDSK
    檢查磁碟並顯示狀態報告。
  • CHKNTFS
    顯示或修改開機時的磁碟檢查。
  • CLS
    清除螢幕。
  • CMD
    開始新的Windows命令轉譯器。
  • COLOR
    設定預設主控台的前景和背景色彩。
  • COMP
    比較兩個或兩組檔案的內容。
  • COMPACT
    顯示或變更NTFS磁碟分割上的檔案壓縮。
  • CONVERT
    將FAT磁碟區轉換成NTFS格式。您不可轉換目前的磁碟機。
  • COPY
    將一個或數個檔案複製到另一個位置。
  • DATE
    顯示或設定日期。
  • DEL
    刪除檔案。
  • DIR
    顯示目錄中的檔案和子目錄清單。
  • DISKCOMP
    比較兩張磁片的內容。
  • DISKCOPY
    將磁片上的內容複製到另一張磁片上。
  • DOSKEY
    編輯命令列、恢復Windows命令和建立巨集。
  • ECHO
    顯示訊息、開啟或關閉命令回音。
  • ENDLOCAL
    結束批次檔環境變更的本土化工作。
  • ERASE
    刪除一個或更多檔案。
  • EXIT
    結束CMD.EXE程式(命令轉譯器)。
  • FC
    比較兩個或兩組檔案,然後顯示兩者之間的相異處。
  • FIND
    在檔案中搜尋文字字串。
  • FINDSTR
    在檔案中搜尋字串。
  • FOR
    在一組檔案中的每個檔案執行一個特定的命令。
  • FORMAT
    將磁碟格式化供Windows使用。
  • FTYPE
    顯示或修改用於檔案附檔名關聯中的檔案類型。
  • GOTO
    將Windows命令轉譯器指向批次程式中已經加了標籤的列。
  • GRAFTABL
    啟用Windows在圖形模式下顯示擴充的字集。
  • HELP
    為Windows命令提供說明資訊。
  • IF
    在批次程式中執行有條件的處理程序。
  • LABEL
    建立、變更或刪除磁碟的磁碟區標籤。
  • MD
    建立目錄。
  • MKDIR
    建立目錄。
  • MODE
    設定系統裝置。
  • MORE
    一次顯示一個螢幕的輸出。
  • MOVE
    從一個目錄移動一個或數個檔案到另一個目錄。
  • PATH
    顯示或設定執行檔的搜尋路徑。
  • PAUSE
    暫停處理批次檔並顯示訊息。
  • POPD
    還原PUSHD儲存的目錄之前的值。
  • PRINT
    列印文字檔案。
  • PROMPT
    變更Windows的命令提示。
  • PUSHD
    儲存目前的目錄,然後變更它。
  • RD
    移除目錄。
  • RECOVER
    從損壞或不良的磁碟中修復可讀取的資訊。
  • REM
    在批次檔或CONFIG.SYS鐘記錄意見(註解)。
  • REN
    重新命名檔案。
  • RENAME
    重新命名檔案。
  • REPLACE
    取代檔案。
  • RMDIR
    移除目錄。
  • SET
    顯示、設定或移除Windows環境變數。
  • SETLOCAL
    開始批次檔中環境變更的本土化工作。
  • SHIFT
    變更批次檔中可取代參數的位置。
  • SORT
    將輸入排序。
  • START
    開始另一個視窗來執行指定的程式或命令。
  • SUBST
    將路徑與磁碟機代號相關聯。
  • TIME
    顯示或設定系統時間。
  • TITLE
    設定CMD.EXE工作階段的視窗標題。
  • TREE
    以圖形顯示磁碟機或路徑的目錄結構。
  • TYPE
    顯示文字檔的內容。
  • VER
    顯示Windows版本。
  • VERIFY
    告訴Windows是否要檢查您的檔案寫入磁片時正確與否。
  • VOL
    顯示磁碟區標籤和序號。
  • XCOPY
    複製檔案和樹狀目錄。

give 發表在 痞客邦 留言(0) 人氣()

一、問題起因
在某項目釋放後Bug統計的附件《釋放後問題》裡有:

CSV處理時,如果處理的主題數過多,發生URL參數上限的錯誤;

可變長度的參數通過URL方式傳遞,會造成這種潛在的錯誤發生。

1、屬於2次發生問題,開發方面沒有及時通過checklist等方式向組員傳達相關注意事項;
2、測試時沒有作大批量數據的測試;

1、作為經驗添加至CheckList中,加強組內共享、檢查的效果;
2、加強測試點是否完備的檢查,重點關注對開發方面共性問題的測試;
通過對模塊原有GUI狀況確認,進行CSV輸出時,輸出結果很大的場合,CSV文件的內容不能輸出。

沒有考慮到POST數據量存在128K的大小限制。

這屬於新問題,以前從未遇見過,也沒有進行過大規模的數據量測試

已將此類檢查列出CheckList中
做為一種經驗積累,這些問題、原因及解決辦法將被列入Checklist,那麼:
第一個問題:URL參數上限的提法準確嗎?上限是多少?
第二個問題:為什麼POST時數據有限制?限制是128K嗎?
二、問題分析
1、第一個:
1)URL不存在參數上限的說法。該問題實際是IE對URL有長度限制的問題。
2)HTTP協議規範也沒有對URL長度進行限制。這個限制是特定的瀏覽器及服務器對它的限制。IE對URL長度的限制是2083字節(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操作系統的支持。[參1]
3)「可變長度的參數通過URL方式傳遞」實際是說提交表單時使用了GET方法,而不是POST方法。造成這種潛在錯誤的是使用GET方法提交表單數據。因為GET方法將數據放在URL裡傳遞給服務器處理。
4)注意這個限制是整個URL長度,而不僅僅是你的參數值數據長度。
5)既然是IE對URL長度的限制,那麼不管是GET方法還是POST方法都存在這個限制。
(關於FORM的GET和POST方法具體內容請參考相關資料[參2])
建議:
1)瞭解應用程序所在的環境,如Web應用的瀏覽器、服務器環境,瞭解其特定的參數限制情況。
2)提交複雜數據儘量使用POST方法。注意FORM不寫method屬性時默認是使用GET方法。
結論(寫入Checklist):
對使用GET方法提交數據時,在IE環境下,需要考慮URL長度2083字節的限制。
2、第二個:
1)理論上講,POST是沒有大小限制的。HTTP協議規範也沒有進行大小限制。
2)「POST數據量存在128K的大小限制」不夠準確,POST數據是沒有限制的,起限制作用的是服務器的處理程序的處理能力。
3)對於ASP程序,Request對象處理每個表單域時存在100K的數據長度限制。但如果使用Request.BinaryRead則沒有這個限制。對於需要處理超過100K表單域數據的解決辦法,請參考後面的[參3]。
4)由這個延伸出去,對於IIS 6.0,微軟出於安全考慮,加大了限制[參4]。我們還需要注意:
IIS 6.0默認ASP POST數據量最大為200KB,每個表單域限制是100KB。
IIS 6.0默認上傳文件的最大大小是4MB。
IIS 6.0默認最大請求頭是16KB。
IIS 6.0之前沒有這些限制。
建議:
1)弄清楚運行環境的默認設定值有助於你的設計及對出現的問題做快速的解決。
2)應該考慮服務器版本。各個版本的IIS對這些參數的默認設定都不一樣,有必要的話,找資料整理出一份對照表。這樣開發與測試時都有個參考。
3)IIS 6.0的這些限制實際只是它的默認設定值而已,實際應用環境你可以修改它們。
在WINNT\system32\inetsrv\MetaBase.xml裡默認定義了:
AspBufferingLimit="4194304" 對應於上傳文件最大大小
AspMaxRequestEntityAllowed="204800" 對應於POST最大數據量
結論(寫入Checklist):
使用ASP時,需要考慮POST表單每個域一般讀取處理時有100KB的限制。充分考慮是否使用Request.Binary。

give 發表在 痞客邦 留言(0) 人氣()

The ALTER TABLE statement allows you to rename an existing table. It can also be used to add, modify, or drop a column from an existing table.

Renaming a table

The basic syntax for renaming a table is:

ALTER TABLE table_name
RENAME TO new_table_name;

For example:

ALTER TABLE suppliers
RENAME TO vendors;

This will rename the suppliers table to vendors.

Adding column(s) to a table

Syntax #1

To add a column to an existing table, the ALTER TABLE syntax is:

ALTER TABLE table_name
ADD column_name column-definition;

For example:

ALTER TABLE supplier
ADD supplier_name varchar2(50);

This will add a column called supplier_name to the supplier table.

Syntax #2

To add multiple columns to an existing table, the ALTER TABLE syntax is:

ALTER TABLE table_name
ADD ( column_1 column-definition,
column_2 column-definition,
...
column_n column_definition );

For example:

ALTER TABLE supplier
ADD ( supplier_name varchar2(50),
city varchar2(45) );

This will add two columns (supplier_name and city) to the supplier table.

Modifying column(s) in a table

Syntax #1

To modify a column in an existing table, the ALTER TABLE syntax is:

ALTER TABLE table_name
MODIFY column_name column_type;

For example:

ALTER TABLE supplier
MODIFY supplier_name varchar2(100) not null;

This will modify the column called supplier_name to be a data type of varchar2(100) and force the column to not allow null values.

Syntax #2

To modify multiple columns in an existing table, the ALTER TABLE syntax is:

ALTER TABLE table_name
MODIFY ( column_1 column_type,
column_2 column_type,
...
column_n column_type );

For example:

ALTER TABLE supplier
MODIFY ( supplier_name varchar2(100) not null,
city varchar2(75) );

This will modify both the supplier_name and city columns.

Drop column(s) in a table

Syntax #1

To drop a column in an existing table, the ALTER TABLE syntax is:

ALTER TABLE table_name
DROP COLUMN column_name;

For example:

ALTER TABLE supplier
DROP COLUMN supplier_name;

This will drop the column called supplier_name from the table called supplier.

Rename column(s) in a table
(NEW in Oracle 9i Release 2)

Syntax #1

Starting in Oracle 9i Release 2, you can now rename a column.

To rename a column in an existing table, the ALTER TABLE syntax is:

ALTER TABLE table_name
RENAME COLUMN old_name to new_name;

For example:

ALTER TABLE supplier
RENAME COLUMN supplier_name to sname;

This will rename the column called supplier_name to sname.

Acknowledgements: Thanks to Dave M., Craig A., and Susan W. for contributing to this solution!

Practice Exercise #1:

Based on the departments table below, rename the departments table to depts.

CREATE TABLE departments
( department_id number(10) not null,
department_name varchar2(50) not null,
CONSTRAINT departments_pk PRIMARY KEY (department_id)
);

Solution:

The following ALTER TABLE statement would rename the departments table to depts:

ALTER TABLE departments
RENAME TO depts;


Practice Exercise #2:

Based on the employees table below, add a column called salary that is a number(6) datatype.

CREATE TABLE employees
( employee_number number(10) not null,
employee_name varchar2(50) not null,
department_id number(10),
CONSTRAINT employees_pk PRIMARY KEY (employee_number)
);

Solution:

The following ALTER TABLE statement would add a salary column to the employees table:

ALTER TABLE employees
ADD salary number(6);


Practice Exercise #3:

Based on the customers table below, add two columns - one column called contact_name that is a varchar2(50) datatype and one column called last_contacted that is a date datatype.

CREATE TABLE customers
( customer_id number(10) not null,
customer_name varchar2(50) not null,
address varchar2(50),
city varchar2(50),
state varchar2(25),
zip_code varchar2(10),
CONSTRAINT customers_pk PRIMARY KEY (customer_id)
);

Solution:

The following ALTER TABLE statement would add the contact_name and last_contacted columns to the customers table:

ALTER TABLE customers
ADD ( contact_name varchar2(50),
last_contacted date );


Practice Exercise #4:

Based on the employees table below, change the employee_name column to a varchar2(75) datatype.

CREATE TABLE employees
( employee_number number(10) not null,
employee_name varchar2(50) not null,
department_id number(10),
CONSTRAINT employees_pk PRIMARY KEY (employee_number)
);

Solution:

The following ALTER TABLE statement would change the datatype for the employee_name column to varchar2(75):

ALTER TABLE employees
MODIFY employee_name varchar2(75);


Practice Exercise #5:

Based on the customers table below, change the customer_name column to NOT allow null values and change the state column to a varchar2(2) datatype.

CREATE TABLE customers
( customer_id number(10) not null,
customer_name varchar2(50),
address varchar2(50),
city varchar2(50),
state varchar2(25),
zip_code varchar2(10),
CONSTRAINT customers_pk PRIMARY KEY (customer_id)
);

Solution:

The following ALTER TABLE statement would modify the customer_name and state columns accordingly in the customers table:

ALTER TABLE customers
MODIFY ( customer_name varchar2(50) not null,
state varchar2(2) );


Practice Exercise #6:

Based on the employees table below, drop the salary column.

CREATE TABLE employees
( employee_number number(10) not null,
employee_name varchar2(50) not null,
department_id number(10),
salary number(6),
CONSTRAINT employees_pk PRIMARY KEY (employee_number)
);

Solution:

The following ALTER TABLE statement would drop the salary column from the employees table:

ALTER TABLE employees
DROP COLUMN salary;


Practice Exercise #7:

Based on the departments table below, rename the department_name column to dept_name.

CREATE TABLE departments
( department_id number(10) not null,
department_name varchar2(50) not null,
CONSTRAINT departments_pk PRIMARY KEY (department_id)
);

Solution:

The following ALTER TABLE statement would rename the department_name column to dept_name in the departments table:

ALTER TABLE departments
RENAME COLUMN department_name to dept_name;

give 發表在 痞客邦 留言(0) 人氣()

除了寫程式之外,資料庫的應用也是蠻重要的,而SQL語法,用法大致相同,但各公司所出的資料庫還是有所差別,而ORACLE SQL給了相當多的函數應用,下面列了一些函法的名稱和用法,並且會舉幾個例子,可以直接將SQL貼到ORACLE資料庫環境下試試.

1.常用函數
1.1 字元函數
=============================================================
1.1.1 ASCII
ASCII(char)

select ASCII(’A'), ASCII(’ABC’) from dual
=============================================================
1.1.2 CHR
CHR(n [USING NCHAR_CS])

select CHR(68), CHR(68 USING NCHAR_CS) from dual
=============================================================
1.1.3 CONCAT
CONCAT(string1, string2)
兩個字串的連結, 等同於使用連接運算子( || ).

select CONCAT(’Good’,’ Morning’), ‘Good’ || ‘ Morning’ from dual
=============================================================
1.1.4 INITCAP
INITCAP(string)
將一個字串中每個單字的第一個字母, 改變為大寫, 而將其它字母變成小寫.

select INITCAP(’good MORNING’) from dual
=============================================================
1.1.5 INSTR
INSTR(string1, string2,[, n[ ,m]])
搜尋string1, 以便找到string2, 並回傳在string1 中該字元的位置,
亦即string2 在 string1 中的開始之處.

select INSTR(’easy com , easy go’, ‘easy’) from dual
select INSTR(’easy com , easy go’, ‘easy’,1,2) from dual
=============================================================
1.1.6 LENGTH
LENGTH(string)
回傳字串中的字元數量

select length(’ABCD’) from dual
select length(’ABCD長度’) from dual
=============================================================
1.1.7 LOWER, UPPER
LOWER(string)
UPPER(string)
將字串中的所有字元轉換為大(小)寫.

select lower(’AbCd’) from dual
select upper(’AbCd’) from dual
=============================================================
1.1.8 RPAD, LPAD
RPAD(string1, n[string2])
LPAD(string1, n[string2])
填補字元(空白)至第N個位置

select rpad(’ABCD’,30,’A') from dual
select lpad(’ABCD’,30,’A') from dual
select rpad(’ABCD’,30) from dual
=============================================================
1.1.9 RTRIM, LTRIM, TRIM
LTRIM(string1,[,string2])
RTRIM(string1,[,string2])
TRIM(string1,[,string2])
移除所指定的字元, (預設值空白)

select rtrim(’ ABCD ‘) from dual
select ltrim(’ ABCD ‘) from dual
select trim(’ ABCD ‘) from dual
select trim(’ ABCD ‘) from dual
SELECT LTRIM(’JJJJJeryyyyyyJJ’,'J’) FROM DUAL
=============================================================
1.1.10 REPLACE
REPLACE(string, search_string, [,replacement_string])
字串取代

select replace(’I LOVE YOU’,'LOVE’,'HATE’) from dual
select replace(’I LOVE YOU’,'LOVE’) from dual
=============================================================
1.1.11 SUBSTR
SUBSTR(string, m [, n] )
回傳一個字串的一部份, m若為負值, 用法如同right function

select substr(’abcdefghijk’,3,2) from dual
select substr(’abcdefghijk’,-3,2) from dual
select substr(’abcdefghijk’,3) from dual
=============================================================
1.1.12 TRANSLATE
TRANSLATE(string, from_string, to_string)
將一個字元組轉換成另一個字元組, 來修改字串.

select translate(’smmfrr space’,'drmfslc’,'1234567′) from dual
=============================================================

1.2 轉換函式
=============================================================
1.2.1 TO_CHAR
TO_CHAR(d [, fmt [, ‘nlsparams’] ] )
將一個日期/時間的值, 轉換為一個以字元為基礎的值.
TO_CHAR(n [, fmt [, ‘nlsparams’] ] )
將一個數值轉換為一個以字元為基礎的值.

數字格式元�
9 用來控制要被顯示之數字的有效位數
0 前導0
$ 會以一個前置的錢字號來顯示
, 在輸出中放置一個逗號
. 標記小數點
B 強迫0值被顯示為空白
S 用於一個格式字串的開始或結束處, 來顯示(+/-)值

select to_char(’1234′,’9999′) from dual => 1234
select to_char(’1234′,’99999′) from dual => 1234
select to_char(’1234′,’999′) from dual => ####

select to_char(’1234′,’0000′) from dual => 1234
select to_char(’1234′,’000000′) from dual => 001234
select to_char(’1234′,’000′) from dual => ####

select to_char(’1234′,’S0999999′) from dual
select to_char(’1234′,’0999990S’) from dual
select to_char(’1234′,’$99999′) from dual
select to_char(’00120340′,’B999999′) from dual
select to_char(’1234′,’$99,999′) from dual
select to_char(’1234′,’S09999.99′) from dual
=============================================================
1.2.2 TO_DATE
TO_DATE(string [, fmt [, ‘nlsparams’]] )
將一個日期/時間值的字元字串, 轉換為date型別的值.

日期格式元�
格式元素 函式
DAY 日的名稱(Saturday, Sunday, Monday等)
DD 月份的天
DDD 年的天
DY 天的縮寫名稱(Sat, Sun, Mon等)
HH 一天的小時
HH12 一天的小時, 同HH
HH24 一天的小時, 24小時制
MI 分鐘
MM 月份數字
MON 三個字母的月份縮寫
MONTH 完整拼出的月份名稱
Q 一年中的季
SS 秒
WW 年的週
YYYY 四位數的年
YYY 年份的最後三位數
YY 年份的最後二位數
Y 年份的最後一位數

select to_date(’2004/03/10′,’YYYY/MM/DD’) from dual
select to_date(’2004/10/03′,’YYYY/DD/MM’) from dual
select to_date(’20040310′,’YYYYMMDD’) from dual
=============================================================
1.2.3 TO_NUMBER
TO_NUMBER(string [, fmt [, ‘nlsparams’] ] )
將字元型態轉換為數值型態

select * from user_tables order by to_number(INITIAL_EXTENT)
=============================================================
1.2.4 NVL
NVL(expr1, expr2)
如果一個給定的輸入值為null時, 會回傳一個另一值, 以便使用。假如expr1是null時, nvl會回傳expr2; 否則, 它會單純地回傳expr1.

select username, nvl(to_char(lock_date),’Not Locked’) from dba_users
=============================================================
1.2.5 DECODE
DECODE (expr , search , result [ , search , result…..] [ , default ] )
一個類似IF敘述的能力。

一般用法:
SELECT name, DECODE(
plugged_in,
0, ‘Not Plugged In’,
1,’Plugged In’,
‘Invalid plugged_in value’
) plugged_in
FROM v$datafile

進階用法:
SELECT SUM(DECODE(owner,’SYS’,1,0)), SUM(DECODE(owner,’SYSTEM’,1,0))
FROM dba_objects

巢式用法:
select owner, table_name, column_name,
DECODE(data_type,
‘VARCHAR2′,’VARCHAR2 (’ || TO_CHAR(DATA_LENGTH) || ‘)’,
‘NUMBER’, decode(data_precision,
NULL, ‘NUMBER’,
‘NUMBER (’ ||
TO_CHAR(DATA_PRECISION) || ‘,’ ||
TO_CHAR(data_scale || ‘)’ )))
from dba_tab_columns
where data_type in (’VARCHAR2′,’NUMBER’)

=============================================================

1.3 數字函式=============================================================
1.3.1 ABC
ABC(n)
回傳一個數字的絕對值

select ABS(-1), ABS(1) from dual
=============================================================
1.3.2 MOD
MOD (m,n)
回傳m除以n的餘數

select MOD(18,12), MOD(30,12), MOD(30,30) from dual
=============================================================
1.3.3 SIGN
SIGN(n)
回傳一個值, 以指出n的符號.
(-1 負數, 0 數字為零, 1 正數)

select SIGN(76), SIGN(0), SIGN(-76.17) from dual
=============================================================
1.3.4 GREATEST, LEAST
GREATEST (expr [ , expr…..] )
LEAST (expr [ , expr…..] )
從所提供之引數的列表中, 回傳最大(小) 值.

select GREATEST(1,2,3) from dual
select GREATEST(’One’,'Two’) from dual
select LEAST(1,2,3) from dual
select GREATEST(TO_DATE(’05/18/2004′,’MM/DD/YYYY’),
TO_DATE(’04/01/2004′,’MM/DD/YYYY’)) from dual

1.3.5 ROUND
ROUND(n, m)
把一個值進位到所指定之特定小數點的位數.
參數:
n: 指定一個將進位的值
m:
select ROUND(123.45), ROUND(123.45,1), ROUND(123.45,-1) from dual

give 發表在 痞客邦 留言(0) 人氣()

在創建GridView控件時,必須先為GridView的每一行創建一個GridViewRow對象,創建每一行時,將引發一個 RowCreated事件;當行創建完畢,每一行GridViewRow就要綁定數據源中的數據,當綁定完成後,將引發RowDataBound事件。如果說我們可以利用RowCreated事件來控制每一行綁定的控件,那麼我們同樣可以利用RowDataBound事件來控制每一行綁定的數據,也就是讓數據如何呈現給大家。

還舉同樣的例子,在數據表中,存在性別列,上面我們用DropListDown控件的DataBounding來表示出了中文的性別,但是畢竟不太美觀,我們現在可以利用Label控件和RowDataBound事件來實現完美的中文性別顯示。RowDataBound,

首先,還是把性別列,設置為模板列,並添加一個Label控件,將Label控件綁定到數據源的性別段,然後我們在GridView控件屬性的事件列表中雙擊RowDataBound,生成如下事件:

Example:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

{

//判斷當前行是否是數據行

if (e.Row.RowType == DataControlRowType.DataRow)

{ //用FindControl方法找到模板中的Label控件

Label lb1= (Label)e.Row.FindControl("Label1");

//因為RowDataBound是發生在數據綁定之後,所以我們可以

//判斷Label綁定的數據,如果是True,就更改其text屬性為男

if (lb1.Text== "True")

lb1.Text = "男";

else

lb1.Text = "female";

}

}

give 發表在 痞客邦 留言(0) 人氣()

一個月的第一天
代碼 (雙擊代碼複製到粘貼板)

SELECT to_date(to_char(SYSDATE,'yyyy-mm')||'-01','yyyy-mm-dd')
FROM dual


sysdate 為數據庫服務器的當前系統時間。
to_char 是將日期型轉為字符型的函數。
to_date 是將字符型轉為日期型的函數,一般使用 yyyy-mm-dd hh24:mi:ss格式,當沒有指定時間部分時,則默認時間為 00:00:00

dual 表為sys用戶的表,這個表僅有一條記錄,可以用於計算一些表達式,如果有好事者用 sys 用戶登錄系統,然後在 dual 表增加了記錄的話,那麼系統99.999%不能使用了。為什麼使用的時候不用 sys.dual 格式呢,因為 sys 已經為 dual 表建立了所有用戶均可使用的別名。


一年的第一天
代碼 (雙擊代碼複製到粘貼板)

SELECT to_date(
to_char(SYSDATE,'yyyy')||'-01-01','yyyy-mm-dd'
)
FROM dual


季度的第一天
代碼 (雙擊代碼複製到粘貼板)

SELECT to_date(
to_char(SYSDATE,'yyyy-')||
lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+1,2,'0')||
'-01',
'yyyy-mm-dd')
FROM dual


floor 為向下取整
lpad 為向左使用指定的字符擴充字符串,這個擴充字符串至2位,不足的補'0'。

當天的半夜
SELECT trunc(SYSDATE)+1-1/24/60/60
FROM dual

trunc 是將 sysdate 的時間部分截掉,即時間部分變成 00:00:00
Oracle中日期加減是按照天數進行的,所以 +1-1/24/60/60 使時間部分變成了 23:59:59。
Oracle 8i 中僅支持時間到秒,9i以上則支持到 1/100000000 秒。

上個月的最後一天
代碼 (雙擊代碼複製到粘貼板)

SELECT trunc(last_day(add_months(SYSDATE,-1)))+1-1/24/60/60
FROM dual


add_months 是月份加減函數。
last_day 是求該月份的最後一天的函數。

本年的最後一天
代碼 (雙擊代碼複製到粘貼板)

SELECT trunc(
last_day(to_date(to_char(SYSDATE,'yyyy')||'-12-01','yyyy-mm-dd'))
)+1-1/24/60/60
FROM dual


本月的最後一天
代碼 (雙擊代碼複製到粘貼板)

select trunc(last_day(sysdate))+1-1/24/60/60
from dual



本月的第一個星期一
代碼 (雙擊代碼複製到粘貼板)

SELECT next_day(
to_date(to_char(SYSDATE,'yyyy-mm')||'-01','yyyy-mm-dd'),
'星期一'
)
FROM dual

next_day 為計算從指定日期開始的第一個符合要求的日期,這裡的'星期一'將根據NLS_DATE_LANGUAGE的設置稍有不同。

去掉時分秒
代碼 (雙擊代碼複製到粘貼板)

select trunc(sysdate)
from dual


顯示星期幾
代碼 (雙擊代碼複製到粘貼板)

SELECT to_char(SYSDATE,'Day')
FROM dual


取得某個月的天數
代碼 (雙擊代碼複製到粘貼板)

SELECT trunc(last_day(SYSDATE))-
to_date(to_char(SYSDATE,'yyyy-mm')||'-01','yyyy-mm-dd')+
1
FROM dual


判斷是否閏年
代碼 (雙擊代碼複製到粘貼板)

SELECT decode(
to_char(last_day(to_date(to_char(SYSDATE,'yyyy')||'-02-01','yyyy-mm-dd')),'dd'),
'28','平年','閏年'
)
FROM dual


一個季度多少天
代碼 (雙擊代碼複製到粘貼板)

SELECT last_day(to_date(
to_char(SYSDATE,'yyyy-')||
lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+3,2,'0')||
'-01','yyyy-mm-dd'
)
)
-
to_date(
to_char(SYSDATE,'yyyy-')||
lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+1,2,'0')||
'-01','yyyy-mm-dd')
+1
FROM dual

give 發表在 痞客邦 留言(0) 人氣()

give 發表在 痞客邦 留言(0) 人氣()

NetBeans中使用DataSource連接Derby


  1. 登入Glassfish主控台,建立JDBC連線區(Connection Pool)

    點選新增後,會看到步驟一,這邊設定
    Connection Pool的名稱、資源類型及Database Vendor。這邊選擇內建的JavaDB做為範例。

    步驟二是Connection Pool的屬性設定,如果沒有特別需求,預設值就好


    最下方的屬性位置,填入相關資料,包括
    ServerNameDatabaseNameURL(URL需要手動增加)

    存檔離開。


  2. 建立JDBC資源,選擇剛剛建立的ConnectionPoolTest,存檔。

     

    Web Container的部分到此處設定完成,接下來設定web.xml

  3. 開啟web.xml,選擇Reference,到Resource Reference的地方新增

    Resource Name的地方要和Web Container上的相同(即設定成jdbc/sample2)

  4. 建立測試用的jsp檔案如下(使用JSTL)
    <%--
        Document   : jdbc_jstl
        Created on : 2008/11/6, 上午 01:02:39
        Author     : shen
    --%>

    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
      
       <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
       <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
       <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <sql:setDataSource dataSource="jdbc/sample2" />
            <sql:query var="result" >
                select NAME from APP.CUSTOMER
            </sql:query>
            <c:forEach items="${result.rows}" var="row" >
                ${row.NAME}<br>
            </c:forEach>
        </body>
    </html>

 

  1. 結果

 



give 發表在 痞客邦 留言(0) 人氣()

設定Glassfish Form Authentication


  1. 建立Realm
    從左方功能表,選擇配置 -> 範圍,然後點右方新增



    使用不同的Realm會有不同的輸入

    若是選擇用File的方式來儲存user/password,檔案會放在
    C:Program Files\glassfish-v2ur2\domains\domain1\config
    格式類似
    admin;{SSHA}u48psZvPo1A9i0bMymS+iLDcSRF71ZTP+iOk7A==;

  2. 建立user
    點選管理使用者

    點選新增,輸入帳號密碼

  3. NetBeans內開啟web.xml,選擇Login的方式

    即使選擇Form,上方的Realm Name還是要填,在Form的地方選擇Login PageError Page

    其中,login2.html裡面,j_security_checkj_usernamej_password三者都是預設值,不能修改。

  4. 建立Security Role

  5. 建立Security Constraints,名稱的地方可自訂
    Web
    Resource Collection的地方輸入

    將下方的Enable Authentication Constraint打勾,並把AdminRole加入

  6. 在專案的WEB-INF下,開啟sun-web.xml。選擇Security,這邊會看到剛剛在Step4建立的Security Role。點選右方的Add Principal,加入Step2建立的user。這裡的user就是可以存取AdminConstraintuser

  7. save all,重新Deploy project

因為AdminConstraint是對整個Web Application做限制,所以只要開啟新的瀏覽器輸入網址,都會看到登入畫面。這邊的user/password就是Glassfish中對WebApplication1所建立的userpassword

 

若登入失敗,會導入error page


give 發表在 痞客邦 留言(0) 人氣()


三分鐘建立JSP自訂標籤(使用NetBeans6.1)






  1. 建立TLD


  2. 建立Tag
    Handler



  3. Tag
    HandlerotherDoEndTagOperations()
    地方建立相關程式


  4. 建立JSP檔案


  5. 看結果




give 發表在 痞客邦 留言(0) 人氣()