posts - 72, comments - 66, trackbacks - 0, articles - 0

          要用java檢測網(wǎng)絡資源是否可用,我們可以采用以下兩種方法:
          一種方法是調用ping命令,
          如:
                Process   process=   Runtime.getRuntime().exec("ping   192.168.0.5");  
                InputStreamReader   return   =   new   InputStreamReader(process.getInputStream());  
                LineNumberReader   returnData   =   new   LineNumberReader   (return);    
             
                String   line="";  
                while((line=returnData.readLine())!=null){  
                    System.out.println(line);  
                }
          通用對返回數(shù)據(jù)進行分析,來探測網(wǎng)絡資源的可用性;
          這種方法有一個缺點:就是許多網(wǎng)絡資源是不允許被ping的,從而針對這類資源無法探測。
          另一種方法是使用URL,
          如:
                          URL url = new URL("http://localhost");  
                          HttpURLConnection connection = (HttpURLConnection) url.openConnection();  
                          int state = connection.getResponseCode();  
                          String responseContent = connection.getResponseMessage();
          通過分析ResponseCode來探測網(wǎng)絡資源的可用性。
          另外,當指定的網(wǎng)絡資源走SSL時,即用https協(xié)議時,需要加入可信證書到trust.keystore.
          通常情況下,我的用的是jre的keystore:cacerts,如jdk6下的路徑為:jdk1.6.0_05/jre/lib/security/cacerts
          我們需要把指定資源的數(shù)字證書導入到信任庫 cacerts.
          可以使用keytool工具:keytool -import -alias localhost -file localhost.cer -keystore cacerts
          如果我們不想使用jre的keystore,我們可以建立自己的keystore,
                  System.setProperty("javax.net.ssl.trustStore", "/home/liqingfeng/workspace/Test/mystore/localhost.keystore");
                  System.setProperty("javax.net.ssl.trustStorePassword","changeit");
          用keytool命令把localhost的證書導入到指定的localhost.keystore中。這樣我們就可以用URL來探測SSL網(wǎng)絡資源的可用性了。

          這里必須注意的是指定網(wǎng)絡資源的證書的CN,必須與資源訪問地址一致,否則會報錯。
          以下是常見異常:
          當keystore中沒有指定資源的證書時:
          javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
          當指定資源證書的CN與資源訪問地址不匹配時:
          javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching localhost found





          posted @ 2008-07-28 15:16 Fingki.li 閱讀(3207) | 評論 (4)編輯 收藏

          Good Address:

          Command Line Tools for win32  
          http://www.vkill.net/tools.html

          腳本中心腳本庫網(wǎng)址:
          http://www.microsoft.com/china/technet/community/scriptcenter/scripts/default.mspx

          有關用戶和組的腳本(找得我好辛苦呀)
          http://www.microsoft.com/china/technet/community/scriptcenter/user/default.mspx

          最近發(fā)現(xiàn)一個不錯的jdk6 source網(wǎng)站,收藏一下:
          http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Modules-sun/security/sun/security/krb5/internal/ktab/KeyTab.java.htm

          http://developer.classpath.org/doc/

          http://fuseyism.com/classpath/doc/

          http://kickjava.com/src/

          http://www.docjar.com/

          VbScript語言參考
          http://book.chinaz.com/VBScript/vbsdocs/vbstoc.htm

          SUN網(wǎng)站
          http://www.java.sun.com
          http://java.sun.com/javase/technologies/security/


          posted @ 2008-07-21 11:50 Fingki.li 閱讀(224) | 評論 (0)編輯 收藏

          在我們用程序進行HTTP連接時,都要監(jiān)測返回的httpstatus,來確定響應狀態(tài)。
          一般的情況下返回都是401,500等。
          但有時候會返回 -2146697211,這種情況一般是無法訪問指定資源。
          請檢查網(wǎng)絡是否異常,是否可以ping通指定資源。
          我曾見到的問題是在DNS中沒有綁定指定的域名和IP,
          例如:我要訪問的資源為:http://liqingfeng:8080 IP為192.168.0.5
          當我沒有在DNS或host中綁定它們時,我進行http連接會返回 status -2146697211
          當我綁定域名和IP后,status 200.
          另外,當返回-2146697191時,一般是證書安全問題。



          posted @ 2008-07-18 09:42 Fingki.li 閱讀(1556) | 評論 (2)編輯 收藏

          最近發(fā)現(xiàn)一個不錯的jdk6 source網(wǎng)站,收藏一下:
          http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Modules-sun/security/sun/security/krb5/internal/ktab/KeyTab.java.htm

          posted @ 2008-07-14 21:32 Fingki.li 閱讀(309) | 評論 (0)編輯 收藏

          由于項目的要求,親密接觸了windows操作.
          windows就是牛,由于其用戶數(shù)的龐大,好多應用必須圍著它轉,順應它的規(guī)則.
          相應的對其操作的一些腳本,也成了很有用的東西.
          記錄以備后查:
          腳本中心腳本庫網(wǎng)址:
          http://www.microsoft.com/china/technet/community/scriptcenter/scripts/default.mspx
          有關用戶和組的腳本(找得我好辛苦呀)
          http://www.microsoft.com/china/technet/community/scriptcenter/user/default.mspx

          posted @ 2008-07-09 23:34 Fingki.li 閱讀(249) | 評論 (0)編輯 收藏

          最近和capicom親密接觸了一下,感覺到它的強大,記錄以備后查.

          capicom是一個對windows來講非常重要的CryptoAPI.
          通過capicom你可以在你的應用中集成Public Key Infrastructure (PKI)功能:獲取證書庫,利用服務器證書簽名,加密數(shù)據(jù).
          通過vbscript你可以輕松的調用它,當然,前提是你已經(jīng)安裝了capicom.dll.
          注冊capicom.dll,打開cmd,轉到capicom.dll目錄下,執(zhí)行:regsvr32 capicom.dll.(當然你也可以自己做個.msi來安裝)
          之后你就可以用各種腳本調用它的強大功能了
          以vbscript為例:
          拿到當前用戶的數(shù)字證書
          Const CAPICOM_MY_STORE = "My"
          Const CAPICOM_CURRENT_USER_STORE  = 2
          Const CAPICOM_STORE_OPEN_READ_ONLY = 0
          Dim oCert, oStore
          Set oStore = CreateObject ("CAPICOM.Store")
          if Err.Number <> 0 Then
             wscript.echo "CAPICOM NOT detected"
             Wscript.Quit(1)
          End if
          oStore.Open CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY
          For Each oCert in oStore.Certificates
             WScript.Echo "  Subject Name: " & oCert.SubjectName
                  WScript.Echo "  Issuer Name: " & oCert.IssuerName
                  WScript.Echo "  SHA-1 Thumbprint: " & oCert.Thumbprint
                  WScript.Echo "  Serial Number: " & oCert.SerialNumber
                  WScript.Echo "  Version: " & oCert.Version
                  WScript.Echo "  Valid From: " & oCert.ValidFromDate
                  WScript.Echo "  Valid To: " & oCert.ValidToDate
          Next
          上面這段代碼就是得到了當前用戶的所有數(shù)字證書.
          當然你也可以得當前機器上的,AD上的等.
          store = CreateObject ("CAPICOM.Store")將返回一個證書庫.
          可利用這個store的open()方法得到相應證書庫及其中的證書.
          .open ()語法為:
          .open(StoreLocationStoreName , OpenMode)
          StoreLocation :

              CAPICOM_ACTIVE_DIRECTORY_USER_STORE 3 得到AD上已經(jīng)發(fā)布的證書
              CAPICOM_CURRENT_USER_STORE 2 得到當前用戶的證書
              CAPICOM_LOCAL_MACHINE_STORE 1 得到本地機器上的證書
              CAPICOM_MEMORY_STORE 0 得到內存中的證書
          StoreName :
              CAPICOM_MY_STORE "MY" 得到當前用戶證書與CAPICOM_CURRENT_USER_STORE配合使用
              "CN=your user name on domain" 得到指定用戶的證書,一般與CAPICOM_ACTIVE_DIRECTORY_USER_STORE配合使用.
          OpenMode:    
              CAPICOM_STORE_OPEN_READ_ONLY 0 只讀方法

          經(jīng)常易出錯的地方是:以上這些常量在vbscript中并沒被預定義,使用前要自己定義一下.其值就是后面相應的數(shù)字.
          之前我就是以為這此常量是VBS預定義了,所以直接用,導致操作不成功,浪費了大量時間去找原因.
          當然,你也可以直接用相應數(shù)字代替這此常量.

          了解更多請參考:
          http://msdn.microsoft.com/en-us/library/aa388130.aspx
          http://207.46.196.114/windowsserver/en/library/8f918fdc-9841-48f9-a46d-28232742239a1033.mspx?mfr=true

          posted @ 2008-07-09 23:20 Fingki.li 閱讀(3512) | 評論 (7)編輯 收藏

          最近項目中要寫vb腳本作些系統(tǒng)操作,收集vb中常用關鍵字對照以備后查:        
                  vbCr Chr(13) 回車符。
          vbCrLf Chr(13) & Chr(10) 回車符與換行符。
          vbFormFeed Chr(12) 換頁符;在 Microsoft Windows 中不適用。
          vbLf Chr(10) 換行符。
          vbNewLine Chr(13) & Chr(10) 或 Chr(10) 平臺指定的新行字符;適用于任何平臺。
          vbNullChar Chr(0) 值為 0 的字符。
          vbNullString 值為 0 的字符串 與零長度字符串 ("") 不同;用于調用外部過程。
          vbTab Chr(9) 水平附簽。
          vbVerticalTab Chr(11) 垂直附簽;在 Microsoft Windows


          vbEmpty 0 未初始化(默認)
          vbNull 1 不包含任何有效數(shù)據(jù)
          vbInteger 2 整型子類型
          vbLong 3 長整型子類型
          vbSingle 4 單精度子類型
          vbDouble 5 雙精度子類型
          vbCurrency 6 貨幣子類型
          vbDate 7 日期子類型
          vbString 8 字符串子類型
          vbObject 9 對象
          vbError 10 錯誤子類型
          vbBoolean 11 Boolean 子類型
          vbVariant 12 Variant (僅用于變量數(shù)組)
          vbDataObject 13 數(shù)據(jù)訪問對象
          vbDecimal 14 十進制子類型
          vbByte 17 字節(jié)子類型
          vbArray 8192 數(shù)組

          常數(shù) 值 描述
          vbBlack &h00 黑色
          vbRed &hFF 紅色
          vbGreen &hFF00 綠色
          vbYellow &hFFFF 黃色
          vbBlue &hFF0000 藍色
          vbMagenta &hFF00FF 紫色
          vbCyan &hFFFF00 青色
          vbWhite &hFFFFFF 白色

          vbOKOnly 0 只顯示確定按鈕。
          vbOKCancel 1 顯示確定和取消按鈕。
          vbAbortRetryIgnore 2 顯示終止、重試和忽略按鈕。
          vbYesNoCancel 3 顯示是、否和取消按鈕。
          vbYesNo 4 顯示是和否按鈕。
          vbRetryCancel 5 顯示重試和取消按鈕。
          vbCritical 16 顯示臨界消息圖標。
          vbQuestion 32 顯示警告詢問圖標。
          vbExclamation 48 顯示警告消息圖標。
          vbInformation 64 顯示提示消息圖標。
          vbDefaultButton1 0 第一個按鈕是默認按鈕。
          vbDefaultButton2 256 第二個按鈕是默認按鈕。
          vbDefaultButton3 512 第三個按鈕是默認按鈕。
          vbDefaultButton4 768 第四個按鈕是默認按鈕。
          vbApplicationModal 0 應用程序模式。用戶必須響應消息框,才能繼續(xù)在當前應用程序中工作。
          vbSystemModal 4096 系統(tǒng)模式。 在 Win16 系統(tǒng)中, 所有應用程序都將中止直到用戶響應消息框。 在 Win32 系統(tǒng)中, 此常數(shù)提供一個應用

          程序模式信息框并總是保留在您可能正在運行的所有其它程序的頂部。

          常數(shù) 值 描述
          vbOK 1 確定按鈕被單擊。
          vbCancel 2 取消按鈕被單擊。
          vbAbort 3 終止按鈕被單擊。
          vbRetry 4 重試按鈕被單擊。
          vbIgnore 5 忽略按鈕被單擊。
          vbYes 6 是按鈕被單擊。
          vbNo 7 否按鈕被單擊。


          vbCr Chr(13) 回車符。
          vbCrLf Chr(13) & Chr(10) 回車符與換行符。
          vbFormFeed Chr(12) 換頁符;在 Microsoft Windows 中不適用。
          vbLf Chr(10) 換行符。
          vbNewLine Chr(13) & Chr(10) 或 Chr(10) 平臺指定的新行字符;適用于任何平臺。
          vbNullChar Chr(0) 值為 0 的字符。
          vbNullString 值為 0 的字符串 與零長度字符串 ("") 不同;用于調用外部過程。
          vbTab Chr(9) 水平附簽。
          vbVerticalTab Chr(11) 垂直附簽;在 Microsoft Windows

          vbEmpty 0 未初始化(默認)
          vbNull 1 不包含任何有效數(shù)據(jù)
          vbInteger 2 整型子類型
          vbLong 3 長整型子類型
          vbSingle 4 單精度子類型
          vbDouble 5 雙精度子類型
          vbCurrency 6 貨幣子類型
          vbDate 7 日期子類型
          vbString 8 字符串子類型
          vbObject 9 對象
          vbError 10 錯誤子類型
          vbBoolean 11 Boolean 子類型
          vbVariant 12 Variant (僅用于變量數(shù)組)
          vbDataObject 13 數(shù)據(jù)訪問對象
          vbDecimal 14 十進制子類型
          vbByte 17 字節(jié)子類型
          vbArray 8192 數(shù)組

          posted @ 2008-07-08 21:38 Fingki.li 閱讀(1312) | 評論 (0)編輯 收藏

          工作中的需要,將一個軟件應用的數(shù)據(jù)庫由hsql轉為postgresql.
          從Hsql中轉數(shù)據(jù)到postgresql時,我采用的是從 dbname.script中獲取數(shù)據(jù)的腳本,寫成新的dbname.sql,然后在postgresql中執(zhí)行的方法。
          經(jīng)過一番努力,終于如愿以常成功導入了數(shù)據(jù)。
          大概瀏覽一下數(shù)據(jù),沒有什么問題,就放心的讓同事去測試了。
          不到一會兒的工夫,同事就找過來,說軟件應用中的原用戶無法登錄,報錯為用戶的privatekey無法解開(此應用采用數(shù)字證書認證,并且加密了privatekey存于數(shù)據(jù)庫)。
          我很是奇怪。
          讓同事新創(chuàng)建用戶,正常 ,也可以正常登錄。
          于是斷定為數(shù)據(jù)有問題。
          打開數(shù)據(jù)庫查看用戶信息表,發(fā)現(xiàn)privatekeyinfo字段中的數(shù)據(jù)中有好多 u000a,感覺不對,再查看一下新創(chuàng)建的用戶,這個字段中沒有。
          找來dbname.sql查看,果真里面有好多\u000a,實際上這一位置應為回車.替換所有的\u000a為回車,重新導入數(shù)據(jù)。
          一切OK了。
          個人感覺原因是:hsql的sql腳本不支持回車符,所以用\u000a代替;而在postgresql中,數(shù)據(jù)庫不認\u000a,導致數(shù)據(jù)被修改。
          從而privatekey無法正常解開。
          希望朋友們不要再走進這個誤區(qū)。

          posted @ 2008-07-04 15:09 Fingki.li 閱讀(328) | 評論 (0)編輯 收藏

          1 安裝:
          軟件其實很簡單,用新立得軟件包管理器搜索psql便能查到postgresql-client-8.2(同時可以搜到8.1版本,哪一個都可以),選中-應用即可。或者在終端下輸入
          xiaop@localhost$ sudo apt-get install postgresql-8.2
          在Ubuntu系統(tǒng)中,服務器啟動腳本放在 /etc/init.d目錄中,您可以用下面的方法來啟動,對于Fedora和Gentoo 也是類似的;
          2
          啟動PostgreSQL 數(shù)據(jù)庫服務器
          xiaop@localhost~# /etc/init.d/postgresql-8.2 start 注:啟動;
          xiaop@localhost~# /etc/init.d/postgresql-8.2 restart 注:重啟;
          xiaop@localhost~# /etc/init.d/postgresql-8.2 stop 注:停止;
          xiaop@localhost~# /etc/init.d/postgresql-8.2 status 注:查看狀態(tài);

          3.創(chuàng)建用戶


          添加用戶命令格式。

          createuser 是 SQL 命令 CREATE USER的封裝。
          命令:createuser [-a] [-A] [-d] [-D] [-e] [-P] [-h 主機名] [-p port] 用戶名


          參數(shù)說明:

          [-a]:允許創(chuàng)建其他用戶,相當于創(chuàng)建一個超級用戶;
          [-A]:不允許此用戶創(chuàng)建其他用戶;
          [-d]:允許此用戶創(chuàng)建數(shù)據(jù)庫;
          [-D]:不允許此用戶創(chuàng)建數(shù)據(jù)庫;
          [-e]:將執(zhí)行過程顯示到Shell上;
          [-P]:創(chuàng)建用戶時,同時設置密碼;
          [-h 主機名]:為某個主機上的Postgres創(chuàng)建用戶;
          [-p port]:與-h參數(shù)一同使用,指定主機的端口。


          3.1添加用戶;


          3.1.1不帶參數(shù)的創(chuàng)建用戶;

          xiaop@localhost~$ createuser testuser
          Shall the new user be allowed to create databases? (y/n) n --------是否可以創(chuàng)建數(shù)據(jù)庫:否
          Shall the new user be allowed to create more new users? (y/n) n ---------是否可以創(chuàng)建新用戶:否
          CREATE USER

          注:不帶參數(shù)創(chuàng)建用戶時,Postgres會詢問此用戶的權限,上面的例子創(chuàng)建了一個普通用戶;


          3.1.2 為指定的主機和端口上創(chuàng)建用戶 ;

          xiaop@localhost~$ createuser -h 172.28.18.51 -p 5000 -D -A -e testuser
          CREATE USER joe NOCREATEDB NOCREATEUSER;
          CREATE USER

          注:這個命令為主機172.28.18.51的5000端口創(chuàng)建用戶testuser, 此用戶不可以創(chuàng)建數(shù)據(jù)庫和其他用戶。


          3.1.3創(chuàng)建超級用戶;

          test@localhost~$ createuser -P -d -a -e testuser
          Enter password for new user: testuser
          Enter it again: testuser
          CREATE USER joe PASSWORD 'testuser' CREATEDB CREATEUSER;
          CREATE USER

          注:這個命令在本地創(chuàng)建一個超級用戶(-a),可以創(chuàng)建數(shù)據(jù)庫(-d), 同時要求設置密碼。


          3.2 刪除用戶:

          命令:dropuser [-i] [-h] [-p] [-e] 用戶名

          參數(shù)說明:
          [ -i]:刪除用戶前,要求確認;
          [-h 主機名]:刪除某個主機上的Postgres用戶;
          [-p port]:與-h參數(shù)一同使用,指定主機的端口;
          [-e]:將執(zhí)行過程顯示到Shell上。


          3.2.1 刪除本地的Postgres用戶;

          test@localhost~$ dropuser testuser
          DROP USER


          3.2.2 刪除遠程Postgres服務器上的用戶;

          test@localhost~$ dropuser -p 5000 -h 172.28.18.51 -i -e testuser
          User "testuser" and any owned databases will be permanently deleted.
          Are you sure? (y/n) y
          DROP USER "testuser"
          DROP USER

          注:此命令刪除主機172.28.18.51(-h)的5000端口(-p)的用戶testuser,并且需要確認(-i);


          4. 創(chuàng)建和刪除數(shù)據(jù)庫;


          4.1創(chuàng)建數(shù)據(jù)庫

          看看您能否訪問數(shù)據(jù)庫服務器的第一個例子就是試著創(chuàng)建一個數(shù)據(jù)庫;
          要創(chuàng)建一個新的數(shù)據(jù)庫,在我們這個例子里叫 mydb,您可以使用下面的命令:

          test@localhost~$ createdb mydb

          它應該生成下面這樣的響應:

          CREATE DATABASE

          如果這樣,那么這一步就成功了,如果您看到類似下面這樣的信息

          createdb: command not found

          那么就是PostgreSQL沒有安裝好,要么是就根本沒裝上;
          您還可以用其它名字創(chuàng)建數(shù)據(jù)庫。 PostgreSQL 允許您在一個節(jié)點上創(chuàng)建任意數(shù)量的數(shù)據(jù)庫。 數(shù)據(jù)庫名必須是以字母開頭并且小于 63 個字符長。 一個方便的做法是創(chuàng)建和您當前用戶名同名的數(shù)據(jù)庫。 許多工具假設該數(shù)據(jù)庫名為缺省數(shù)據(jù)庫名,所以這樣可以節(jié)省您的敲鍵。要創(chuàng)建這樣的數(shù)據(jù)庫,只需要鍵入 :

          test@localhost~$ createdb


          4.2 刪除數(shù)據(jù)庫

          如果您再也不想使用您的數(shù)據(jù)庫了,那么您可以刪除它。 比如,如果您是數(shù)據(jù)庫 mydb 的所有人(創(chuàng)建人), 那么您就可以用下面的命令刪除它:
          test@localhost~$ dropdb mydb

          注:(對于這條命令而言,數(shù)據(jù)庫名不是缺省的用戶名。這樣您就必須聲明它。) 這個動作物理上將所有與該數(shù)據(jù)庫相關的文件都刪除并且不可取消, 因此做這件事之前一定要想清楚;


          5.訪問數(shù)據(jù)庫

          一旦您創(chuàng)建了數(shù)據(jù)庫,您就可以訪問它,您可以運行PostgreSQL交互的終端程序,叫psql,它允許您交互地輸入,編輯,和執(zhí)行 SQL 命令。(圖形化登錄請參見6. Postgresql圖形化管理工具pgAdmin3)


          5.1 激活數(shù)據(jù)庫

          您需要啟動psql,試驗剛才的例子。您可以用下面的命令為 mydb 數(shù)據(jù)庫激活它:

          test@localhost~$ psql mydb

          如果您省略了數(shù)據(jù)庫名字,那么它缺省就是您的用戶賬號名字。

          Welcome to psql 8.2.4, the PostgreSQL interactive terminal.
          Type: \copyright for distribution terms
                 \h for help with SQL commands
                 \? for help with psql commands
                 \g or terminate with semicolon to execute query
                 \q to quit
          mydb=#

          注:最后一行 mydb=#,這個提示符意味著您是數(shù)據(jù)庫超級用戶。


          5.2 幫助和退出數(shù)據(jù)庫

          psql 程序有一些不屬于 SQL 命令的內部命令。 它們以反斜杠開頭,""。 有些這種命令在歡迎信息中列出。比如,您可以用下面的命令獲取各種PostgreSQL SQL 命令的幫助語法:
          mydb=> \h

          要退出 psql,鍵入
          mydb=> \q

          然后 psql 就會退出并且給您返回到命令行 shell; (要獲取更多有關內部命令的信息,您可以在 psql 提示符上鍵入 \?。)

          6. Postgresql圖形化管理工具pgAdmin3 ;

          版本:Version1.4.3


          6.1 安裝;


          6.1.1 Ubuntu安裝 ;

          有兩種方法:

          1.在新立得軟件包管理器中搜索pgadmin3,找到pgadmin3--應用

          2.終端下輸入命令:
          test@localhost:~$ sudo apt-get install pgadmin3


          6.1.2 其它系統(tǒng)的安裝;

          您可以參考其它系統(tǒng)正常的軟件的安裝方法,起本類似,這里就不多做介紹了;


          6.2 pgAdmin3的簡單使用;

          圖形化管理系統(tǒng)相對比較直觀,您可以在命令行下操作,然后在pgAdmin3下查看效果;


          6.2.1 pgAdmin3的啟動

          您可以在應用程序---系統(tǒng)工具中找到pgAdmin3的啟動項;
          也可以在命令行下輸入:
          test@localhost:~$ /usr/bin/pgadmin3 start


          6.2.2 連接已創(chuàng)建的數(shù)據(jù)庫mydb ;

          點擊檔案-----新增服務器,然后在跳出的窗口下輸入:
          地址:localhost
          描述:服務器名稱(隨意填寫)
          維護數(shù)據(jù)庫:postgres
          用戶名:自己創(chuàng)建一個(詳情參見創(chuàng)建用戶)
          密碼:和用戶名對應(創(chuàng)建用戶時自己創(chuàng)建)

          點擊確定后大家便可以查看postsql已有的數(shù)據(jù)庫了;
          注:pgAdmin3的數(shù)據(jù)庫和終端下創(chuàng)建的數(shù)據(jù)庫是完全同步的(可以用刷新查看效果), pgAdmin3是比較方便的圖形化管理工具,它可以創(chuàng)建圖表,管理數(shù)據(jù)庫等,有關pgAdmin3的詳細介紹我們在以后討論,本文主要介紹命令行下的操 作。圖形化管理工具能做到的命令行都可以做到,您可以在命令行下創(chuàng)建表,在pgAdmin3上查看是否同步:

          7. 創(chuàng)建和刪除表;


          7.1 創(chuàng)建新表;

          創(chuàng)建完數(shù)據(jù)庫之后,您就可以創(chuàng)建新表了,可以通過聲明表的名字和所有字段的名字及其類型來創(chuàng)建表,例如:
          mydb#CREATE TABLE weather (
                          city varchar(80),
                          temp_lo int, -- 最低氣溫
                          temp_hi int, -- 最高氣溫
                          prcp real, -- 降水量
                          date date
                               );

          注:您可以在 psql 里連換行符一起鍵入這些東西。 psql 可以識別該命令直到分號才結束,不要忘記“;”
          您可以在 SQL 命令中自由使用空白(也就是空格,tab,和換行符)。 這就意味著您可以用和上面不同的對齊方式鍵入命令。 兩個劃線("--") 引入注釋。 任何跟在它后面的東西直到該行的結尾都被忽略。 SQL 是對關鍵字和標識符大小寫不敏感的語言,只有在標識符用雙引號包圍時才能保留它們的大小寫屬性。


          7.2 數(shù)據(jù)類型;

          上面例子中的varchar(80) 聲明一個可以存儲最長 80 個字符的任意字符串的數(shù)據(jù)類型。 int 是普通的整數(shù)類型。 real 是一種用于存儲單精度浮點數(shù)的類型。 date 類型應該可以自解釋。
          PostgresSQL 支持標準的 SQL 類型 int,smallint, real,double precision, char(N), varchar(N),date, time,timestamp 和 interval,還支持其他的通用類型和豐富的幾何類型。 PostgreSQL 可以客戶化為定制任意的用戶定義的數(shù)據(jù)類型,您可以參考PostgreSQL的中文文檔來查詢;


          7.3 刪除表;

          如果您不再需要某個表,或者您想創(chuàng)建一個不同的表,那么您可以用下面的命令刪除它:
          mydb#DROP TABLE tablename


          8. 向表中添加行;


          8.1 INSERT;

          INSERT 用于向表中添加行,您可以輸入(在數(shù)據(jù)庫中操作):
          mydb#INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');

          注:所有數(shù)據(jù)類型都使用了相當明了的輸入格式。 那些不是簡單數(shù)字值的常量必需用單引號(')包圍, 就象在例子里一樣。


          8.2 point類型輸入;

          point 類型要求一個座標對作為輸入,如下:
          mydb#INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');


          8.3 COPY;

          您還可以使用 COPY 從文本文件中裝載大量數(shù)據(jù)。 這么干通常更快,因為 COPY 命令就是為這類應用優(yōu)化的, 只是比 INSERT 少一些靈活性.比如:
          mydb#COPY weather FROM '/home/user/weather.txt';

          注:weather.txt是您提前寫好的符合格式標準的表格內容文檔;


          9. 查詢一個表;


          9.1 SELECT;

          要從一個表中檢索數(shù)據(jù)就是查詢這個表。 SQL 的 SELECT 就是做這個用途的。 該語句分為選擇列表(列出要返回的字段部分),表列表(列出從中檢索數(shù)據(jù)的表的部分), 以及可選的條件(聲明任意限制的部分)。比如,要檢索表 weather 的所有行,鍵入:
          SELECT * FROM weather;
          <code>
          輸出結果:
          <code>
               city | temp_lo | temp_hi | prcp | date
          ---------------+---------+---------+------+------------
          San Francisco | 46 | 50 | 0.25 | 1994-11-27
          San Francisco | 43 | 57 | 0 | 1994-11-29
          Hayward | 37 | 54 | | 1994-11-29
          (3 rows)

          您可以在選擇列表中寫任意表達式,而不僅僅是字段列表。比如,您可以:
          SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;

          這樣應該得出:
               city | temp_avg | date
          ---------------+----------+------------
          San Francisco | 48 | 1994-11-27
          San Francisco | 50 | 1994-11-29
          Hayward | 45 | 1994-11-29
          (3 rows)

          請注意這里的 AS 子句是如何給輸出字段重新命名的。(AS 子句是可選的。)


          9.2 WHERE;

          一個查詢可以使用 WHERE 子句"修飾",聲明需要哪些行。 WHERE 子句包含一個布爾(真值)表達式,只有那些布爾表達式為真的行才會被返回。 允許您在條件中使用常用的布爾操作符(AND,OR, 和 NOT)。 比如,下面的查詢檢索舊金山的下雨天的天氣:
          mydb#SELECT * FROM weather
              WHERE city = 'San Francisco' AND prcp > 0.0;

          結果:
               city | temp_lo | temp_hi | prcp | date
          ---------------+---------+---------+------+------------
          San Francisco | 46 | 50 | 0.25 | 1994-11-27
          (1 row)


          9.3 排序;

          您可以要求返回的查詢是排好序的:
          mydb#SELECT * FROM weather
              ORDER BY city;

          得出結果:
               city | temp_lo | temp_hi | prcp | date
          ---------------+---------+---------+------+------------
          Hayward | 37 | 54 | | 1994-11-29
          San Francisco | 43 | 57 | 0 | 1994-11-29
          San Francisco | 46 | 50 | 0.25 | 1994-11-27

          在這個例子里,排序的順序并非絕對清晰的,因此您可能看到 San Francisco 行隨機的排序。 但是如果您使用下面的語句,那么就總是會得到上面的結果
          SELECT * FROM weather
              ORDER BY city, temp_lo;

          您可以要求查詢的結果按照某種順序排序, 并且消除重復的行輸出:
          mydb#SELECT DISTINCT city
              FROM weather;

          得出結果:
               city
          ---------------
          Hayward
          San Francisco
          (2 rows)

          再次聲明,結果行的順序可能是隨機的。


          10. 視圖;

          假設您的應用對天氣記錄和城市位置的組合列表特別感興趣, 而您又不想每次鍵入這些查詢。那么您可以在這個查詢上創(chuàng)建一個視圖, 它給這個查詢一個名字,您可以像普通表那樣引用它。

          進入數(shù)據(jù)庫后輸入:
          mydb#CREATE VIEW myview AS
              SELECT city, temp_lo, temp_hi, prcp, date, location
                  FROM weather, cities
                  WHERE city = name;

          建立視圖;

          然后選擇建好的視圖:
          SELECT * FROM myview;

          結果如下:
               city | temp_lo | temp_hi | prcp | date | location
          ---------------+---------+---------+------+------------+-----------
          San Francisco | 46 | 50 | 0.25 | 1994-11-27 | (-194,53)
          San Francisco | 43 | 57 | 0 | 1994-11-29 | (-194,53)
          (2 rows)


          11. 更新行;

          您可以用 UPDATE 命令更新現(xiàn)有的行。 假設您發(fā)現(xiàn)所有 11 月 28 日的溫度計數(shù)都低了兩度,那么您就可以用下面的方式更新數(shù)據(jù):
          mydb#UPDATE weather
              SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2
              WHERE date > '1994-11-28';

          看看數(shù)據(jù)的新狀態(tài):
          SELECT * FROM weather;

          結果為:
               city | temp_lo | temp_hi | prcp | date
          ---------------+---------+---------+------+------------
          San Francisco | 46 | 50 | 0.25 | 1994-11-27
          San Francisco | 41 | 55 | 0 | 1994-11-29
          Hayward | 35 | 52 | | 1994-11-29
          (3 rows)


          12. 刪除行;

          數(shù)據(jù)行可以用 DELETE 命令從表中刪除。假設您對Hayward的天氣不再感興趣,那么您可以用下面的方法把那些行從表中刪除:
          mydb#DELETE FROM weather WHERE city = 'Hayward';

          我們用下面形式的語句的時候一定要小心
          DELETE FROM tablename;

          如果沒有條件,DELETE 將從指定表中刪除所有行,把它清空。做這些之前系統(tǒng)不會請求您確認!


          部分參考自:http://www.chinalinuxpub.com/read.php?wid=1552

          posted @ 2008-07-04 09:12 Fingki.li 閱讀(1044) | 評論 (0)編輯 收藏

          ?linux下查看系統(tǒng)版本命令:

          head -n 1 /etc/issue

          posted @ 2008-07-03 15:59 Fingki.li 閱讀(804) | 評論 (0)編輯 收藏

          僅列出標題
          共8頁: 上一頁 1 2 3 4 5 6 7 8 下一頁 
          主站蜘蛛池模板: 砀山县| 新兴县| 武乡县| 抚远县| 长春市| 磴口县| 安岳县| 阜新市| 怀来县| 浙江省| 渭南市| 德令哈市| 定陶县| 剑阁县| 塘沽区| 灵璧县| 乌拉特中旗| 梁河县| 缙云县| 晋江市| 女性| 买车| 金堂县| 北海市| 本溪市| 龙里县| 泗水县| 安丘市| 宜兰市| 宁城县| 商丘市| 沂源县| 股票| 涞源县| 金乡县| 伊吾县| 邓州市| 门头沟区| 凉城县| 长宁区| 兴业县|