2009-07-19 02:14

Eclipse 3.4 3.5 連結 MySQL

首先 Eclipse 必須裝有 DataBase Tool 的套件
再來系統要安裝 JDBC for MySQL 的函示庫

這跟 3.3 的需求不同
函示庫必須安裝在 Java 的目錄下
要不然就會得到以下的錯誤訊息
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

在 Ubuntu 下你可以使用以下指令安裝
sudo apt-get install libmysql-java

或著到 MySQL 官網下載 mysql-connector-java-5.1.8.tar.gz
然後將 jar 解開至 /usr/share/java 下


看圖說故事
Eclipse MySQL JDBC
在 Eclipse 中建立新連結

Eclipse MySQL JDBC
選取資料庫類型
並填寫連線名稱

Eclipse MySQL JDBC
先建立連結驅動器
之後再填寫這些設定值
要不然也無發測試連線

Eclipse MySQL JDBC
選取資料庫版本

Eclipse MySQL JDBC
這裡要先刪除原有的設定
要不然會出現下面的錯誤訊息
Unable to locate JAR/zip in file system as specified by the driver definition: mysql-connector-java-5.1.0-bin.jar

然後再加入新的連結函示庫

Eclipse MySQL JDBC
函示庫的位址在 /usr/share/java

Eclipse MySQL JDBC
這樣就可以成功建立連結了
再來就是把剩下的設定填一填就好了

之後開啟 Eclipse 後只要在剛建好的連結上執行連接就可以了

參考來源:
Using Eclipse Dali with Hibernate as Persistence Provider
2009-07-19 01:03

利用 AlphaImageLoader 解決 IE6 對 png 圖檔的透明問題

之前都利用 JavaScript 的 htc 去解決 png 的透明問題
但是在 JavaScript 作動前 png 是不會正常顯示的
在學會 AlphaImageLoader 的使用後發現效果還蠻好的

但是會有一些奇怪後遺症
就是區域內的連接都失效了
解決的方式就是在利用一個元素放在區域內
然後設有 position:relative; 的屬性
連結修正無法生效在設有 position:absolute; 的區域內

CSS :

#ContainerWrapper{
background: transparent url(/images/border_bg.png) repeat-y;
width:982px;
margin:0 auto;

/*IE6 PNG 檔透明修正設定*/
_background: transparent;
_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/images/border_bg.png', sizingMethod='scale');
}

#ContainerWrapper #Container{
/*修正 AlphaImageLoader 造成的連結失效問題*/
_position:relative;
}


HTML:

<div id="ContainerWrapper">
<div id="Container">
</div>
</div>



AlphaImageLoader 的參數值
  1. enabled:布林值(Boolean)。是否開啟濾鏡(基本上可以忽略這個設定)
    • true:開啟濾鏡(預設值)
    • false:關閉濾鏡

  2. sizingMethod:字串(String)。設定圖片在元素容器裡的顯示方式
    • crop:剪切圖片以符合應元素尺寸
    • image:使元素尺寸符合圖片尺寸(預設值)
    • scale:縮放圖片以符合元素尺寸

  3. src :字串(String)。指定圖片的路徑,注意這個路徑是指加載濾鏡的頁面相對於圖片的路徑而不是css文件相對於圖片的路徑。
    建議統一使用以 DocumentRoot 為準的絕對路徑

參考來源:
Microsoft.AlphaImageLoader滤镜讲解
2009-07-19 00:49

InnoDB 匯入時關閉 Foreign Key 檢查 [MySQL]

在設有 Foreign Key 的資料表在寫入時都會檢查資料的正確性
可是再匯入原有資料時會因為表順序而產生錯誤問題
這時候就必須關閉 Foreign Key 檢查

我都會在原始資料的 sql 文件最前面加入這兩行
第一:先關閉 Foreign Key 檢查,避免匯入失敗
第二:確定文件的編碼格式,避免亂碼的問題

-- 關閉 Foreign Key 檢查, 0 是關閉,1 是開啟
-- 設定只會在這次的連結中生效
SET FOREIGN_KEY_CHECKS = 0;

-- 指定匯入的編碼方式
SET NAMES 'UTF8';
2009-07-09 21:32

(轉載)mysqldump 5.1 資料備份詳細指令 [MySQL]

轉載自:MySQL 5.1參考手冊

mysqldump - 資料庫備份程式

mysqldump [options] db_name [tables]
mysqldump [options] --database DB1 [DB2 DB3...]
mysqldump [options] --all--database
如果沒有指定任何資料表或使用了---database或--all--database選項,則轉儲整個資料庫。

要想獲得您的版本的mysqldump支援的選項,執行mysqldump ---help。

如果運行mysqldump沒有--quick或--opt選項,mysqldump在轉儲結果前將整個結果集裝入內存。如果轉儲大資料庫可能會出現問題。該選項預設啟用,但可以用--skip-opt禁用。

如果使用最新版本的mysqldump程式生成一個轉儲重裝到很舊版本的MySQL伺服器中,不應使用--opt或-e選項。


選項 OPTIONS

--help,-?
顯示幫助消息並退出。

--add-drop--database
在每個CREATE DATABASE語句前新增DROP DATABASE語句。

--add-drop-tables
在每個CREATE TABLE語句前新增DROP TABLE語句。

--add-locking
用LOCK TABLES和UNLOCK TABLES語句引用每個資料表轉儲。重載轉儲檔案時插入得更快。參見7.2.16節,「INSERT語句的速度」。

--all--database,-A
轉儲所有資料庫中的所有資料表。與使用---database選項相同,在命令行中命名所有資料庫。

--allow-keywords
允許建立關鍵字列名。應在每個列名前面加上資料表名前綴。

---comments[={0|1}]
如果設置為 0,禁止轉儲檔案中的其它訊息,例如程式版本、伺服器版本和主機。--skip—comments與---comments=0的結果相同。 預設值為1,即包括額外訊息。

--compact
產生少量輸出。該選項禁用註釋並啟用--skip-add-drop-tables、--no-set-names、--skip-disable-keys和--skip-add-locking選項。

--compatible=name
產生與其它資料庫系統或舊的MySQL伺服器更兼容的輸出。值可以為ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options或者no_field_options。要使用幾個值,用逗號將它們隔開。這些值與設置伺服器SQL模式的相應選項有相同的含義。參見5.3.2節,「SQL伺服器模式」。

該選項不能保證同其它伺服器之間的相容性。它只啟用那些目前能夠使轉儲輸出更兼容的SQL模式值。例如,--compatible=oracle 不映射Oracle類型或使用Oracle註釋語法的數據類型。

--complete-insert,-c
使用包括列名的完整的INSERT語句。

--compress,-C
壓縮在客戶端和伺服器之間發送的所有訊息(如果二者均支援壓縮)。

--create-option
在CREATE TABLE語句中包括所有MySQL資料表選項。

--database,-B
轉儲幾個資料庫。通常情況,mysqldump將命令行中的第1個名字參量看作資料庫名,後面的名看作資料表名。使用該選項,它將所有名字參量看作資料庫名。CREATE DATABASE IF NOT EXISTS db_name和USE db_name語句包含在每個新資料庫前的輸出中。

--debug[=debug_options],-# [debug_options]
寫調試日誌。debug_options字串通常為'd:t:o,file_name'。

--default-character-set=charset
使用charsetas預設字元編碼。參見5.10.1節,「數據和排序用字元編碼」。如果沒有指定,mysqldump使用utf8。

--delayed-insert
使用INSERT DELAYED語句插入行。

--delete-master-logs
在主複製伺服器上,完成轉儲操作後刪除二進制日誌。該選項自動啟用--master-data。

--disable-keys,-K
對於每個資料表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;語句引用INSERT語句。這樣可以更快地裝載轉儲檔案,因為在插入所有行後建立索引。該選項只適合MyISAM資料表。

--extended-insert,-e
使用包括幾個VALUES列資料表的多行INSERT語法。這樣使轉儲檔案更小,重載檔案時可以加速插入。

--fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--lines-terminated-by=...
這些選項結合-T選項使用,與LOAD DATA INFILE的相應子句有相同的含義。參見13.2.5節,「LOAD DATA INFILE語法」。

--first-slave,-x
不贊成使用,現在重新命名為--lock-all-tables。

--flush-logs,-F
開始轉儲前刷新MySQL伺服器日誌檔案。該選項要求RELOAD權限。請注意如果結合--all--database(或-A)選項使用該選項,根據每個轉儲的資料庫刷新日誌。

例外情況是當使用--lock-all-tables或--master-data的時候:在這種情況下,日誌只刷新一次,在所有 資料表被鎖定後刷新。如果您想要同時轉儲和刷新日誌,應使用--flush-logs連同--lock-all-tables或--master-data。

--force,-f
在資料表轉儲過程中,即使出現SQL錯誤也繼續。

--host=host_name,-h host_name
從給定主機的MySQL伺服器轉儲數據。預設主機是localhost。

--hex-blob
使用十六進制符號轉儲二進制字串列(例如,'abc' 變為0x616263)。影響到的列有BINARY、VARBINARY、BLOB。

--lock-all-tables,-x
將資料庫中的所有資料表加鎖。在整體轉儲過程中通過全局讀鎖定來實現。該選項自動關閉--single-transaction和--lock-tables。

--lock-tables,-l
開始轉儲前鎖定所有資料表。用READ LOCAL鎖定資料表以允許並行插入MyISAM資料表。對於事務資料表例如InnoDB和BDB,--single-transaction是一個更好的選項,因為它不根本需要鎖定資料表。

請注意當轉儲多個資料庫時,--lock-tables分別為每個資料庫鎖定資料表。因此,該選項不能保證轉儲檔案中的資料表在資料庫之間的邏輯一致性。不同資料庫資料表的轉儲狀態可以完全不同。

--master-data[=value]
該選項將二進制日誌的位置和檔案名寫入到輸出中。該選項要求有RELOAD權限,並且必須啟用二進制日誌。如果該選項值等於1,位置和檔案名被寫入CHANGE MASTER語句形式的轉儲輸出,如果您使用該SQL轉儲主伺服器以設置從伺服器,從伺服器從主伺服器二進制日誌的正確位置開始。如果選項值等於2,CHANGE MASTER語句被寫成SQL註釋。如果value被省略,這是預設動作。

--master-data選項啟用--lock-all-tables,除非還指定--single-transaction(在這種情況下,只在剛開始轉儲時短時間獲得全局讀鎖定。又見--single-transaction。在任何一種情況下,日誌相關動作發生在轉儲時。該選項自動關閉--lock-tables。

--no-create-db,-n
該選項禁用CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name語句,如果給出---database或--all--database選項,則包含到輸出中。

--no-create-info,-t
不寫重新建立每個轉儲資料表的CREATE TABLE語句。

--no-data,-d
不寫資料表的任何行訊息。如果您只想轉儲資料表的結構這很有用。

--opt
該選項是速記;等同於指定 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset。

它可以給出很快的轉儲操作並產生一個可以很快裝入MySQL伺服器的轉儲檔案。該選項預設開啟,但可以用--skip-opt禁用。要想只禁用確信用-opt啟用的選項,使用--skip形式;例如,--skip-add-drop-tables或--skip-quick。

--password[=password],-p[password]
連接伺服器時使用的密碼。如果您使用短選項形式(-p),不能在選項和密碼之間有一個空格。如果在命令行中,忽略了--password或-p選項後面的 密碼值,將提示您輸入一個。

--port=port_num,-P port_num
用於連接的TCP/IP端口號。

--protocol={TCP | SOCKET | PIPE | MEMORY}
使用的連接協議。

--quick,-q
該選項用於轉儲大的資料表。它強制mysqldump從伺服器一次一行地檢索資料表中的行而不是檢索所有行並在輸出前將它緩存到內存中。

--quote-names,-Q
用『`』字元引用資料庫、資料表和列名。如果伺服器SQL模式包括ANSI_QUOTES選項,用『"』字元引用名。預設啟用該選項。可以用--skip-quote-names禁用,但該選項應跟在其它選項後面,例如可以啟用--quote-names的--compatible。

--result-file=file,-r file
將輸出轉向給定的檔案。該選項應用在Windows中,因為它禁止將新行『\n』字元轉換為『\r\n』回車、返回/新行序列。

--routines,-R
在轉儲的資料庫中轉儲儲存程式(函數和程式)。使用---routines產生的輸出包含CREATE PROCEDURE和CREATE FUNCTION語句以重新建立子程式。但是,這些語句不包括屬性,例如子程式定義者或建立和修改時間戳。這說明當重載子程式時,對它們進行建立時定義者應設置為重載用戶,時間戳等於重載時間。

如果您需要建立的子程式使用原來的定義者和時間戳屬性,不使用--routines。相反,使用一個具有mysql資料庫相應權限的MySQL帳號直接轉儲和重載mysql.proc資料表的內容。

該選項在MySQL 5.1.2中新增進來。在此之前,儲存程式不轉儲。

--set-charset
將SET NAMES default_character_set加到輸出中。該選項預設啟用。要想禁用SET NAMES語句,使用--skip-set-charset。

--single-transaction
該選項從伺服器轉儲數據之前發出一個BEGIN SQL語句。它只適用於事務資料表,例如InnoDB和BDB,因為然後它將在發出BEGIN而沒有阻塞任何應用程式時轉儲一致的資料庫狀態。

當使用該選項時,應記住只有InnoDB資料表能以一致的狀態被轉儲。例如,使用該選項時任何轉儲的MyISAM或HEAP資料表仍然可以更改狀態。

--single-transaction選項和--lock-tables選項是互斥的,因為LOCK TABLES會使任何掛起的事務隱含提交。

要想轉儲大的資料表,應結合--quick使用該選項。

--socket=path,-S path
當連接localhost(為預設主機)時使用的套接字檔案。

--skip--comments
參見---comments選項的描述。

--tab=path,-T path
產生tab分割的數據檔案。對於每個轉儲的資料表,mysqldump建立一個包含建立資料表的CREATE TABLE語句的tbl_name.sql檔案,和一個包含其數據的tbl_name.txt檔案。選項值為寫入檔案的目錄。

預設情況,.txt數據檔案的格式是在列值和每行後面的新行之間使用tab字元。可以使用--fields-xxx和--行--xxx選項明顯指定格式。

註釋:該選項只適用於mysqldump與mysqld伺服器在同一台機器上運行時。您必須具有FILE權限,並且伺服器必須有在您指定的目錄中有寫檔案的授權。

--tables
覆蓋---database或-B選項。選項後面的所有參量被看作資料表名。

--triggers
為每個轉儲的資料表轉儲觸發器。該選項預設啟用;用--skip-triggers禁用它。

--tz-utc
在轉儲檔案中加入SET TIME_ZONE='+00:00'以便TIMESTAMP列可以在具有不同時區的伺服器之間轉儲和重載。(不使用該選項,TIMESTAMP列在具有本地時區的源伺服器和目的伺服器之間轉儲和重載)。--tz-utc也可以保護由於夏令時帶來的更改。--tz-utc預設啟用。要想禁用它,使用--skip-tz-utc。該選項在MySQL 5.1.2中加入。

--user=user_name,-u user_name
連接伺服器時使用的MySQL帳號。

--verbose,-v
冗長模式。打印出程式操作的詳細訊息。

--version,-V
顯示版本訊息並退出。

--where='where-condition', -w 'where-condition'
只轉儲給定的WHERE條件選擇的記錄。請注意如果條件包含命令解釋符專用空格或字元,一定要將條件引用起來。
例如:
"--where=user='jimf'"

"-wuserid>1"

"-wuserid<1"

--xml,-X
將轉儲輸出寫成XML。

--var_name=value
用來選項設置下面的變數:

max_allowed_packet

客戶端/伺服器之間通信的緩存區的最大大小。最大為1GB。
net_buffer_length

客戶端/伺服器之間通信的緩存區的初始大小。當建立多行插入語句時(如同使用選項--extended-insert或--opt),mysqldump建立長度達net_buffer_length的行。如果增加該變數,還應確保在MySQL伺服器中的net_buffer_length變數至少這麼大。

還可以使用--set-variable=var_name=value或-O var_name=value語法設置變數。然而,現在不贊成使用該語法。


範例


# mysqldump最常用於備份一個整個的資料庫:
mysqldump --opt db_name > backup-file.sql

# 您可以這樣將轉儲檔案讀回到伺服器:
mysql `db_name` < `backup-file.sql`
# 或者為:
mysql -e "source /path-to--backup/backup-file.sql" `db_name`



# mysqldump也可用於從一個MySQL伺服器向另一個伺服器複製數據時裝載資料庫:
mysqldump --opt `db_name` | mysql --host=`remote_host` -C `db_name`



# 可以用一個命令轉儲幾個資料庫:
mysqldump ---database `db_name1` [`db_name2` ...] > `my_databases.sql`



# 如果您想要轉儲所有資料庫,使用--all--database選項:
mysqldump --all-databases > `all_databases.sql`

# 如果資料表保存在InnoDB儲存引擎中,mysqldump提供了一種聯機備份的途徑(參見下面的命令)。該備份只需要在開始轉儲時對所有資料表進行全局讀鎖定(使用FLUSH TABLES WITH READ LOCK)。獲得鎖定後,讀取二進制日誌的相應內容並將鎖釋放。因此如果並且只有當發出FLUSH...時正執行一個長的更新語句,MySQL伺服器才停止直到長語句結束,然後轉儲則釋放鎖。因此如果MySQL伺服器只接收到短("短執行時間")的更新語句,即使有大量的語句,也不會注意到鎖期間。
mysqldump --all-databases --single-transaction > `all_databases.sql`



# 對於點對點恢復(也稱為「前滾」,當您需要恢復舊的備份並重放該備份以後的更改時),循環二進制日誌(參見5.11.3節,「二進制日誌」)或至少知道轉儲對應的二進制日誌內容很有用:
mysqldump --all-databases --master-data=2 > `all_databases.sql`
# 或
mysqldump --all-databases --flush-logs --master-data=2 > `all_databases.sql`

# 如果資料表保存在InnoDB儲存引擎中,同時使用--master-data和--single-transaction提供了一個很方便的方式來進行適合點對點恢復的聯機備份。



# 單純匯出資料,不匯出任何欄位結構
mysqldump -u`username` --opt -c -n -t --skip-triggers `dbname` > `databases.sql`
2009-07-09 17:38

[PHP] 時區設定(date.timezone)

方法一:更改 php.ini 中的 date.timezone
[Date]
; Defines the default timezone used by the date functions
date.timezone = Asia/Taipei


方法二:利用 set_ini()
<?php
ini_set('date.timezone','Asia/Taipei');
//.......
?>


參考來源:
php 改時區(改為台北時區)
php时区设置
2009-07-09 16:50

MySQL 加解密函數


--[單向加密]
-- MD5 演算法
MD5(str)

-- MySQL 密碼演算法
PASSWORD(str)

-- Unix crypt 演算法
ENCRYPT(str[,salt])

-- 安全散列演算法
SHA1(str)
SHA(str)


--[雙向加密]
-- MySQL 中的低階加解密演算法,
DECODE() -- 解密
ENCODE() -- 加密

-- 以 Advanced Encryption Standard 演算法加解密
AES_DECRYPT(crypt_str,key_str) -- 解密
AES_ENCRYPT(str,key_str)) -- 加密

-- 以 DES 演算法加解密,需要 SSL 的支援
DES_DECRYPT(crypt_str[,key_str]) -- 解密
DES_ENCRYPT(str[,{key_num|key_str}]) -- 加密


--[資料壓縮]
COMPRESS(string_to_compress) -- 壓縮
UNCOMPRESS(string_to_uncompress) -- 解壓縮
UNCOMPRESSED_LENGTH(compressed_string) -- 回傳壓縮前的字串長度


對於 key_str 的設定建議使用 MySQL 變數處理

-- 在 MySQL 中設定金鑰變數
SELECT @key:='sfdgsjhgjgsdfsg'

-- 在查詢資料時可以使用金鑰變數,這樣就可以不用在程式中傳遞金鑰了
-- 在程式撰寫時看起來也比較簡潔
SELECT
`Id`,
AES_DECRYPT(`Name`,@key)AS`Name`,
AES_DECRYPT(`Email`,@key)AS`Email`
FROM `system_uesr`


對於加密過的資料必須存放在二進位( BLOB )的欄位格式中,詳細的型態格式請察看10.5. Data Type Storage Requirements

類型 大小(單位:字節)
 TinyBlob 最大 255
 Blob 最大 65K
 MediumBlob 最大 16M
 LongBlob 最大 4G



參考來源:
MySQL 5.1 Reference Manual :: 11.11.2 Encryption and Compression Functions
2009-07-09 16:17

Eclipse 3.3 , 3.4 and 3.5 中文化語言包

之前為中文化找好久
終於再 JavaWorld@TW 找到下載聯結

先到下載頁面 Babel Language Packs 選擇所對應的版本名稱
Eclipse 3.3 Europa R0.8.0
Eclipse 3.4 Ganymede R0.8.0
Eclipse 3.5 Galileo R0.8.0
Eclipse 3.6 Helios R0.8.0


再來就是找到繁體中文的區段

然後下載所需要的語言包

條目說明:
BabelLanguagePack-eclipse-zh_TW_3.4.0.v20090620043401.zip (97.67%)
eclipse - 主要的語言包,如果有使用 CDT 外掛可以再多下載 tools.cdt 語言包
zh_TW - 語系
3.4.0 - 支援的版本
v20090620043401 - 更新時間
97.67% - 中文化的%

將語言包解壓縮至 Eclipse 的程式目錄裡
然後重新開啟 Eclipse 就可以了
2009-07-09 15:47

Ubuntu 時間及時區設定 [Linux]

前面要先說一個很基礎的觀念
系統時間與 BIOS 時間是不一樣的
因為系統時間會再加上一個時區設定
而 BIOS 則是以 UTC 時間為準

# 取得時區設定檔,請選擇你需要的時區
sudo tzselect

# 更換系統時區檔
sudo ln -sf /usr/share/zoneinfo/Asia/Taipei /etc/localtime

# 讓核心時間與網路時間伺服器對時
sudo ntpdate pool.ntp.org

# 更新 BIOS 的時間
sudo hwclock -w

# 編輯系統排程,再裏面加入下面這行,讓系統排程每日對時一次
sudo crontab -e
@daily /usr/sbin/ntpdate pool.ntp.org > /dev/null


參考資料:
[Ubuntu]Ubuntu 更改時區
Ntpdate - Ubuntu 正體中文 Wiki