2013年4月13日 星期六

[筆記] 如何設定 tomcat 的網頁資源路徑 與 顯示歡迎畫面

安裝tomcat的目錄/conf/server.xml
在<Hostname="localhost" debug="0" appBase="webapps"......> </Host>標籤之間添加:
<Context path="A1" docBase="A2" debug="0" reloadable="true" />
A1:不填則輸入ip就顯示A2目錄下的資源;若為/test,則要輸入http://ip:8080/test才可以。
A2:預設為tomcat/webapps/ROOT,也就是網頁資源的路徑。
ex: http://127.0.0.1:8080/haha 取得jsp-examples下的資源。










安裝tomcat的目錄/conf/web.xml
<welcome-file-list>
<welcome-file>A3</welcome-file>
.
.
.
</welcome-file-list>
A3:要當做首頁的html或jsp放最上面




2013年4月10日 星期三

[ORACLE] ORACLE SQL DEVELOPER 連接 SQL SERVER 2008

需要jtds這個第三方jdbc driver,
但版本還不能太新,試過1.3版不行,
改為1.2.2版就可以......
下載後解壓縮 jtds-1.2.2.jar 檔案並置於 SQL Developer安裝目錄\jdbc\lib ,
之後在偏好設定>資料庫>協力廠商第三方jdbc驅動,加入 jtds-1.2.2.jar就ok囉!

jtds官方下載連結

2013年4月9日 星期二

[閱讀筆記] HEAD FIRST 深入淺出 SQL

DES(a,b) a:數字的總位數 b:小數點後的位數

DESC table_name; 顯示資料表的格式

NULL是不能互相比較的,它只代表未定義的值

DEFAULT a(預設值,型態要與欄位相同)

字串內若有單引號要加上跳脫字元\,SQL才能辨認單引號的起始與結束,亦可在單引號前面再加一個單引號,效果相同

SELECT drink_name FROM drink_info WHERE drink_name>='L' AND drink_name<'M';
/*尋找drink_name為L字母開頭的*/

SELECT drink_name FROM drink_info WHERE drink_name BETWEEN 'L' AND 'M';
/*尋找drink_name為L到M字母開頭的*/



欄位沒有=NULL,必須使用IS NULL關鍵字,例如WHERE calories IS NULL

萬用字元(wildcard)
%表示任意數量的未知字元
_表示1個未知字元

萬用字元(wildcard)搭配LIKE可用於比對部分字串,例如WHERE location LIKE '%CA'
/*尋找location欄以CA為結尾的*/

IN (a,b,c,...)只要符合期中ㄧ個值,避免使用OR的冗長,例如WHERE rating IN ('A','B','D');
NOT IN (a,b,c,...)不在a,b,c...之中

NOTㄧ定接在WHERE後面,除了NOT IN,IS NOT NULL等變形例外

DELETE不能刪除單ㄧ欄位裡的值,或是資料表裡某ㄧ欄的所有值

UPDATE drink_info SET cost=cost+1
WHERE drink_name='Blue Moon'
OR WHERE drink_name='Oh My Gosh'
OR WHERE drink_name='Lime Fizz';
/*這三種飲料的價錢都加1元*/

下圖說明WHERE子句中的字串比對要全相符才OK......

單元性資料表是正規化(Normalization)的第一步驟,加上主鍵後又稱1NF狀態(first normal form,第一正規化)。
單元性資料表兩特色:
(i)資料欄內不會有多個同類型的值
(ii)不會有多個同類型的資料欄

SHOW CREATE TABLE table_name; 顯示當初CREATE的語法
SHOW CREATE DATABASE database_name;
SHOW COLUMNS FROM table_name;
SHOW INDEX FROM table_name;
SHOW WARNINGS;


ALTER TABLE drink_info
ADD COLUMN drink_id INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY(drink_id);
/*為資料表加入遞增主鍵並放在第一欄*/


(ALTER)修改資料表,常搭配下列使用......
CHANGE 可同時改變現存資料欄的名稱與型別。
MODIFY 修改現存資料欄的型別或位置。
ADD 在目前的資料表裡新增一欄。
DROP 從資料表裡卸除某欄。
RENAME TO table_new_name 更改資料表名稱。

ALTER TABLE table_name
CHANGE COLUMN 舊欄名 新欄名 型別 NOT NULL etc......;
/*新欄名與型別都要定義,否則會報錯,如下圖......*/



ALTER TABLE table_name
MODIFY COLUMN 欄名 型別 NOT NULL etc...... AFTER column_xxx;
MODIFY只能用AFTER才能成功與RDBMS軟體有關,有些軟體甚至只有在插入新資料欄時才能改變順序。事實上,MODIFY的改變順序是軟體的幕後操作,如果欄位內已經有資料或是不確定軟體是否支持此功能,盡量不要對欄位的位置動手動腳。總而言之,最好於設計資料表時,就構思欄位的最佳順序。

RIGHT(col_name,2)    右邊算起的2個字元
LEFT(col_name,2)    左邊算起的2個字元
SUBSTRING_INDEX(col_name, ',' ,1)    第1個逗號之前的所有字元
SUBSTRING(your_string, start_position, length)    指定起始位置和長度的子字串
UPPER(your_string)    轉換成大寫
LOWER(your_string)    轉換成小寫
REVERSE(your_string)    將字串順序反轉
LTRIM(your_string)    消除左側空白
RTRIM(your_string)    消除右側空白
LENGTH(your_string)    取得字串長度,即字元數量

UPDATE movie_table
SET category=
CASE
    WHEN drama='T' AND rating='R' THEN 'drama-r'

    WHEN comedy='T' AND rating='R' THEN 'comedy-r'
    WHEN action='T' AND rating='R' THEN 'action-r'

    WHEN gore='T' AND rating='R' THEN 'horror-r'
    WHEN scifi='T' AND rating='R' THEN 'scifi-r'
    WHEN category='misc' AND rating='G' THEN 'family'
    (ELSE......沒有可不加)
END;

ORDER的強大效果......(順序可能因RDBMS不同而異)


ORDER BY column_name1 ASC,column_name2 DESC;
ASC(升冪,ASCENDING) : SQL預設排序方式,可不寫。
DESC(降冪,DESCENDING) : 可以反轉查詢結果的順序。
須注意,這個DESC與查看資料表欄位資訊的DESC(DESCRIBE)不同,且不能使用完整的寫法。

DISTINCT關鍵字可以選出獨一無二的值。
SELECT DISTINCT sale_date FROM cookie_sales ORDER BY sale_date;

LIMIT可以限制查詢數量。
SELECT first_name,SUM(sales) FROM cookie_sales GROUP BY first_name ORDER BY SUM(sales) DESC LIMIT 2; 表示只選出頭兩筆。
LIMIT 1,2 則表示選出第二筆和第三筆,前表index(第一筆index為0)後表筆數。

schema(綱要),用於表達資料庫內的結構,包括資料表與資料欄,還有各種資料構造相互連接的方式。

foreign key(外鍵),是資料表裡的某一欄,它參照的另一個資料表的主鍵。

第二正規化(2NF)
規則ㄧ : 符合1NF
規則二 : 沒有部分功能相依性

第三正規化(3NF)
規則ㄧ : 符合2NF
規則二 : 沒有遞移功能相依性

某某某改變了而我也要跟著改變,這稱做我對某某某具有功能相依性......

非關聯性子查詢(noncorrelated subqueries)--子查詢可以獨立執行,且不會參照外層查詢的任何結果。

關聯性子查詢(correlated subqueries)--內層查詢的解譯,需依賴外層查詢的結果。

SQL說 : 交叉連結是件非常浪費時間的事,關聯性子查詢也會拖慢速度。連結比子查詢有效率。

當看到自我參照的外鍵時,通常是使用自我連結的時機(透過別名的使用......)。

UNION--真正意義上的聯集,只接受ㄧ個ORDER BY,且須位於敘述末端,因為UNION已經把許多個查詢的結果串連起來,並區分了群組。

UNION ALL--同UNION,但包括所有重複的值。

任何ㄧ種SELECT查詢都可用於建立新資料表(搭配CREATE TABLE table_name AS......)。


2013年4月1日 星期一

[學習筆記] jLIVE

jLIVE所產生的專案為*.jlv,匯入時亦是採此檔案類型

任何的設定修改後必須存檔。

"/servlet/com.probe.jslive.ProbeServlet" 這一個字串並不允許任何修改否則會無法執行應用程式。


[閱讀筆記] Oracle+SQL必備參考 p.161

SQL是宣告式的語法,不是過程化的,因此不提供過程控制。

SQL語法告訴Oracle要做啥,而不是該如何做。

SELECT name || ' ' || lastName FROM friendList ;
/* 得到姓名+空格+姓氏 */
NULL 連接 NULL 會得到NULL

兩張或多張表所共同擁有的column稱為key column,可以將兩張或多張表連接成單ㄧ結果集

DDL-Data Definition Language-通常由句權限的DBA使用
DML-Data Manipulation Language

GRANT-同意
REVOKE-廢除

DATABASE四種狀態
dismounted-未安裝的
mounted-安裝的
opened-開放的
closed-關閉的

ENABLE RESTRICTED SESSION-只允許具有限制權限的用戶登入
DISABLE RESTRICTED SESSION-停用此功能

AUDIT UPDATE ON scott.bonus;-對此表的UPDATE語句進行審核
AUDIT ALL ON scott.bonus WHENEVER NOT SUCCESSFUL;-審核此表未完成的操作
AUDIT SELECT scott.bonus NOT SUCCESSFUL;-對不成功的SELECT審核,常用在訪問者沒有權限時

SEQUENCE-創見序號產生器的關鍵字
ALTER SEQUENCE ord_seq
START WITH 101
MINVALUE 1
MAXVALUE 9999
CYCLE
ORDER;

INCREMENT BY-指定増量,不能為0,默認值為1
START WITH-指定被產生的第一個序列號
MAXVALUE-指定序列號到達的最大值,預設是不指定,也就是10^27
MINVALUE-指定序列號的最小值,預設值是不指定,也就是1
CYCLE-指定序列號到達最大值時,將從最小值開始
NOCYCLE-序列號到達最高值時,不產生另外的序列號
CACHE-指定緩存中的序列號,預設20,但資料庫重啟將遺失
NOCACHE
ORDER-指定序列號按要求的次序產生,預設是NOORDER
NOORDER

CREATE [PUBLIC] SYNONYM FOR XXX;-為XXX創造別名,PUBLIC沒寫表示僅架構擁有者可使用此別名
DROP [PUBLIC] SYNONYM XXX;-刪除別名

ALTER TABLE scott.emp ADD(bonus NUMBER(7,2));-為此TABLE增加一個bonus欄位
ALTER TABLE scott.emp MODIFY(bonus NUMBER(9,2))-將bonus欄位改為9位數

ALTER SESSION SET SQL_TRACE=TRUE;-開啟SQL追蹤功能會降低效能,平常應該關閉

DELETE FROM scott.emp WHERE sal>(SELECT AVG(sal) FROM scott.emp);-刪除薪水大於平均水的列

如果使用TABLE_ALIAS,在語句中引用ㄧ定要使用ALIAS

SCHEMA-架構名,如省略就為前用戶ID

@DBLINK-資料庫連接名

PARTITION-插入到TABLE的特定分區中

SUBPARTITION-插入到TABLE的特定子分區中

INSERT INTO emp(empno,empname,hiredate,mgr,sal) VALUES (7999,'JACK','10-JUN-00',7839,500);
/*ㄧ般插入用法*/

INSERT INTO newemp SELECT * FROM scott.emp WHERE comm>0;
/*使用子查詢,newemp每ㄧ列都接受子查詢的值,子查詢中不包含FOR, UPDATE*/

SELECT ename,dname,hiredate,sal,comm FROM scott.emp,scott.dept WHERE emp.deptno=dept.deptno;
/*由此可見SELECT也可以在FROM後面填入多個表單來取值*/

SELECT ename,dname,hiredate,sal comm FROM scott.emp a,scott.dept WHERE a.deptno=dept.deptno
AND sal>(SELECT AVG(sal) FROM scott.emp) ORDER BY sal;
/*列出同deptno且sal大於平均的,並且以sal由低到高排序*/

SELECT dname Department,MAX(sal) Maximum,MIN(sal) Minimum FROM scott.emp,scott.dept WHERE emp.deptno=dept.deptno GROUP BY dname;
/*每ㄧ個部門檢索最高最低的薪水*/