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

要用java检测网络资源是否可用,我们可以采用以下两种方法:
一种方法是调用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);  
      }
通用对返回数据进行分析,来探测网络资源的可用性;
这种方法有一个缺点:就是许多网络资源是不允许被ping的,从而针对这类资源无法探测。
另一种方法是使用URL,
如:
                URL url = new URL("http://localhost");  
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();  
                int state = connection.getResponseCode();  
                String responseContent = connection.getResponseMessage();
通过分析ResponseCode来探测网络资源的可用性。
另外,当指定的网络资源走SSL时,即用https协议时,需要加入可信证书到trust.keystore.
通常情况下,我的用的是jre的keystore:cacerts,如jdk6下的路径为:jdk1.6.0_05/jre/lib/security/cacerts
我们需要把指定资源的数字证书导入到信任库 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网络资源的可用性了。

这里必须注意的是指定网络资源的证书的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 阅读(3171) | 评论 (4)编辑 收藏

Good Address:

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

脚本中心脚本库网址:
http://www.microsoft.com/china/technet/community/scriptcenter/scripts/default.mspx

有关用户和组的脚本(找得我好辛苦呀)
http://www.microsoft.com/china/technet/community/scriptcenter/user/default.mspx

最近发现一个不错的jdk6 source网站,收藏一下:
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网站
http://www.java.sun.com
http://java.sun.com/javase/technologies/security/


posted @ 2008-07-21 11:50 Fingki.li 阅读(203) | 评论 (0)编辑 收藏

在我们用程序进行HTTP连接时,都要监测返回的httpstatus,来确定响应状态。
一般的情况下返回都是401,500等。
但有时候会返回 -2146697211,这种情况一般是无法访问指定资源。
请检查网络是否异常,是否可以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 阅读(1537) | 评论 (2)编辑 收藏

最近发现一个不错的jdk6 source网站,收藏一下:
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 阅读(286) | 评论 (0)编辑 收藏

由于项目的要求,亲密接触了windows操作.
windows就是牛,由于其用户数的庞大,好多应用必须围着它转,顺应它的规则.
相应的对其操作的一些脚本,也成了很有用的东西.
记录以备后查:
脚本中心脚本库网址:
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 阅读(236) | 评论 (0)编辑 收藏

最近和capicom亲密接触了一下,感觉到它的强大,记录以备后查.

capicom是一个对windows来讲非常重要的CryptoAPI.
通过capicom你可以在你的应用中集成Public Key Infrastructure (PKI)功能:获取证书库,利用服务器证书签名,加密数据.
通过vbscript你可以轻松的调用它,当然,前提是你已经安装了capicom.dll.
注册capicom.dll,打开cmd,转到capicom.dll目录下,执行:regsvr32 capicom.dll.(当然你也可以自己做个.msi来安装)
之后你就可以用各种脚本调用它的强大功能了
以vbscript为例:
拿到当前用户的数字证书
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
上面这段代码就是得到了当前用户的所有数字证书.
当然你也可以得当前机器上的,AD上的等.
store = CreateObject ("CAPICOM.Store")将返回一个证书库.
可利用这个store的open()方法得到相应证书库及其中的证书.
.open ()语法为:
.open(StoreLocationStoreName , OpenMode)
StoreLocation :

    CAPICOM_ACTIVE_DIRECTORY_USER_STORE 3 得到AD上已经发布的证书
    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 只读方法

经常易出错的地方是:以上这些常量在vbscript中并没被预定义,使用前要自己定义一下.其值就是后面相应的数字.
之前我就是以为这此常量是VBS预定义了,所以直接用,导致操作不成功,浪费了大量时间去找原因.
当然,你也可以直接用相应数字代替这此常量.

了解更多请参考:
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 阅读(3485) | 评论 (7)编辑 收藏

最近项目中要写vb脚本作些系统操作,收集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 不包含任何有效数据
vbInteger 2 整型子类型
vbLong 3 长整型子类型
vbSingle 4 单精度子类型
vbDouble 5 双精度子类型
vbCurrency 6 货币子类型
vbDate 7 日期子类型
vbString 8 字符串子类型
vbObject 9 对象
vbError 10 错误子类型
vbBoolean 11 Boolean 子类型
vbVariant 12 Variant (仅用于变量数组)
vbDataObject 13 数据访问对象
vbDecimal 14 十进制子类型
vbByte 17 字节子类型
vbArray 8192 数组

常数 值 描述
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 应用程序模式。用户必须响应消息框,才能继续在当前应用程序中工作。
vbSystemModal 4096 系统模式。 在 Win16 系统中, 所有应用程序都将中止直到用户响应消息框。 在 Win32 系统中, 此常数提供一个应用

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

常数 值 描述
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 不包含任何有效数据
vbInteger 2 整型子类型
vbLong 3 长整型子类型
vbSingle 4 单精度子类型
vbDouble 5 双精度子类型
vbCurrency 6 货币子类型
vbDate 7 日期子类型
vbString 8 字符串子类型
vbObject 9 对象
vbError 10 错误子类型
vbBoolean 11 Boolean 子类型
vbVariant 12 Variant (仅用于变量数组)
vbDataObject 13 数据访问对象
vbDecimal 14 十进制子类型
vbByte 17 字节子类型
vbArray 8192 数组

posted @ 2008-07-08 21:38 Fingki.li 阅读(1287) | 评论 (0)编辑 收藏

工作中的需要,将一个软件应用的数据库由hsql转为postgresql.
从Hsql中转数据到postgresql时,我采用的是从 dbname.script中获取数据的脚本,写成新的dbname.sql,然后在postgresql中执行的方法。
经过一番努力,终于如愿以常成功导入了数据。
大概浏览一下数据,没有什么问题,就放心的让同事去测试了。
不到一会儿的工夫,同事就找过来,说软件应用中的原用户无法登录,报错为用户的privatekey无法解开(此应用采用数字证书认证,并且加密了privatekey存于数据库)。
我很是奇怪。
让同事新创建用户,正常 ,也可以正常登录。
于是断定为数据有问题。
打开数据库查看用户信息表,发现privatekeyinfo字段中的数据中有好多 u000a,感觉不对,再查看一下新创建的用户,这个字段中没有。
找来dbname.sql查看,果真里面有好多\u000a,实际上这一位置应为回车.替换所有的\u000a为回车,重新导入数据。
一切OK了。
个人感觉原因是:hsql的sql脚本不支持回车符,所以用\u000a代替;而在postgresql中,数据库不认\u000a,导致数据被修改。
从而privatekey无法正常解开。
希望朋友们不要再走进这个误区。

posted @ 2008-07-04 15:09 Fingki.li 阅读(309) | 评论 (0)编辑 收藏

1 安装:
软件其实很简单,用新立得软件包管理器搜索psql便能查到postgresql-client-8.2(同时可以搜到8.1版本,哪一个都可以),选中-应用即可。或者在终端下输入
xiaop@localhost$ sudo apt-get install postgresql-8.2
在Ubuntu系统中,服务器启动脚本放在 /etc/init.d目录中,您可以用下面的方法来启动,对于Fedora和Gentoo 也是类似的;
2
启动PostgreSQL 数据库服务器
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 注:查看状态;

3.创建用户


添加用户命令格式。

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


参数说明:

[-a]:允许创建其他用户,相当于创建一个超级用户;
[-A]:不允许此用户创建其他用户;
[-d]:允许此用户创建数据库;
[-D]:不允许此用户创建数据库;
[-e]:将执行过程显示到Shell上;
[-P]:创建用户时,同时设置密码;
[-h 主机名]:为某个主机上的Postgres创建用户;
[-p port]:与-h参数一同使用,指定主机的端口。


3.1添加用户;


3.1.1不带参数的创建用户;

xiaop@localhost~$ createuser testuser
Shall the new user be allowed to create databases? (y/n) n --------是否可以创建数据库:否
Shall the new user be allowed to create more new users? (y/n) n ---------是否可以创建新用户:否
CREATE USER

注:不带参数创建用户时,Postgres会询问此用户的权限,上面的例子创建了一个普通用户;


3.1.2 为指定的主机和端口上创建用户 ;

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端口创建用户testuser, 此用户不可以创建数据库和其他用户。


3.1.3创建超级用户;

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

注:这个命令在本地创建一个超级用户(-a),可以创建数据库(-d), 同时要求设置密码。


3.2 删除用户:

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

参数说明:
[ -i]:删除用户前,要求确认;
[-h 主机名]:删除某个主机上的Postgres用户;
[-p port]:与-h参数一同使用,指定主机的端口;
[-e]:将执行过程显示到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. 创建和删除数据库;


4.1创建数据库

看看您能否访问数据库服务器的第一个例子就是试着创建一个数据库;
要创建一个新的数据库,在我们这个例子里叫 mydb,您可以使用下面的命令:

test@localhost~$ createdb mydb

它应该生成下面这样的响应:

CREATE DATABASE

如果这样,那么这一步就成功了,如果您看到类似下面这样的信息

createdb: command not found

那么就是PostgreSQL没有安装好,要么是就根本没装上;
您还可以用其它名字创建数据库。 PostgreSQL 允许您在一个节点上创建任意数量的数据库。 数据库名必须是以字母开头并且小于 63 个字符长。 一个方便的做法是创建和您当前用户名同名的数据库。 许多工具假设该数据库名为缺省数据库名,所以这样可以节省您的敲键。要创建这样的数据库,只需要键入 :

test@localhost~$ createdb


4.2 删除数据库

如果您再也不想使用您的数据库了,那么您可以删除它。 比如,如果您是数据库 mydb 的所有人(创建人), 那么您就可以用下面的命令删除它:
test@localhost~$ dropdb mydb

注:(对于这条命令而言,数据库名不是缺省的用户名。这样您就必须声明它。) 这个动作物理上将所有与该数据库相关的文件都删除并且不可取消, 因此做这件事之前一定要想清楚;


5.访问数据库

一旦您创建了数据库,您就可以访问它,您可以运行PostgreSQL交互的终端程序,叫psql,它允许您交互地输入,编辑,和执行 SQL 命令。(图形化登录请参见6. Postgresql图形化管理工具pgAdmin3)


5.1 激活数据库

您需要启动psql,试验刚才的例子。您可以用下面的命令为 mydb 数据库激活它:

test@localhost~$ psql mydb

如果您省略了数据库名字,那么它缺省就是您的用户账号名字。

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=#,这个提示符意味着您是数据库超级用户。


5.2 帮助和退出数据库

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 其它系统的安装;

您可以参考其它系统正常的软件的安装方法,起本类似,这里就不多做介绍了;


6.2 pgAdmin3的简单使用;

图形化管理系统相对比较直观,您可以在命令行下操作,然后在pgAdmin3下查看效果;


6.2.1 pgAdmin3的启动

您可以在应用程序---系统工具中找到pgAdmin3的启动项;
也可以在命令行下输入:
test@localhost:~$ /usr/bin/pgadmin3 start


6.2.2 连接已创建的数据库mydb ;

点击档案-----新增服务器,然后在跳出的窗口下输入:
地址:localhost
描述:服务器名称(随意填写)
维护数据库:postgres
用户名:自己创建一个(详情参见创建用户)
密码:和用户名对应(创建用户时自己创建)

点击确定后大家便可以查看postsql已有的数据库了;
注:pgAdmin3的数据库和终端下创建的数据库是完全同步的(可以用刷新查看效果), pgAdmin3是比较方便的图形化管理工具,它可以创建图表,管理数据库等,有关pgAdmin3的详细介绍我们在以后讨论,本文主要介绍命令行下的操 作。图形化管理工具能做到的命令行都可以做到,您可以在命令行下创建表,在pgAdmin3上查看是否同步:

7. 创建和删除表;


7.1 创建新表;

创建完数据库之后,您就可以创建新表了,可以通过声明表的名字和所有字段的名字及其类型来创建表,例如:
mydb#CREATE TABLE weather (
                city varchar(80),
                temp_lo int, -- 最低气温
                temp_hi int, -- 最高气温
                prcp real, -- 降水量
                date date
                     );

注:您可以在 psql 里连换行符一起键入这些东西。 psql 可以识别该命令直到分号才结束,不要忘记“;”
您可以在 SQL 命令中自由使用空白(也就是空格,tab,和换行符)。 这就意味着您可以用和上面不同的对齐方式键入命令。 两个划线("--") 引入注释。 任何跟在它后面的东西直到该行的结尾都被忽略。 SQL 是对关键字和标识符大小写不敏感的语言,只有在标识符用双引号包围时才能保留它们的大小写属性。


7.2 数据类型;

上面例子中的varchar(80) 声明一个可以存储最长 80 个字符的任意字符串的数据类型。 int 是普通的整数类型。 real 是一种用于存储单精度浮点数的类型。 date 类型应该可以自解释。
PostgresSQL 支持标准的 SQL 类型 int,smallint, real,double precision, char(N), varchar(N),date, time,timestamp 和 interval,还支持其他的通用类型和丰富的几何类型。 PostgreSQL 可以客户化为定制任意的用户定义的数据类型,您可以参考PostgreSQL的中文文档来查询;


7.3 删除表;

如果您不再需要某个表,或者您想创建一个不同的表,那么您可以用下面的命令删除它:
mydb#DROP TABLE tablename


8. 向表中添加行;


8.1 INSERT;

INSERT 用于向表中添加行,您可以输入(在数据库中操作):
mydb#INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');

注:所有数据类型都使用了相当明了的输入格式。 那些不是简单数字值的常量必需用单引号(')包围, 就象在例子里一样。


8.2 point类型输入;

point 类型要求一个座标对作为输入,如下:
mydb#INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');


8.3 COPY;

您还可以使用 COPY 从文本文件中装载大量数据。 这么干通常更快,因为 COPY 命令就是为这类应用优化的, 只是比 INSERT 少一些灵活性.比如:
mydb#COPY weather FROM '/home/user/weather.txt';

注:weather.txt是您提前写好的符合格式标准的表格内容文档;


9. 查询一个表;


9.1 SELECT;

要从一个表中检索数据就是查询这个表。 SQL 的 SELECT 就是做这个用途的。 该语句分为选择列表(列出要返回的字段部分),表列表(列出从中检索数据的表的部分), 以及可选的条件(声明任意限制的部分)。比如,要检索表 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. 视图;

假设您的应用对天气记录和城市位置的组合列表特别感兴趣, 而您又不想每次键入这些查询。那么您可以在这个查询上创建一个视图, 它给这个查询一个名字,您可以像普通表那样引用它。

进入数据库后输入:
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 命令更新现有的行。 假设您发现所有 11 月 28 日的温度计数都低了两度,那么您就可以用下面的方式更新数据:
mydb#UPDATE weather
    SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2
    WHERE date > '1994-11-28';

看看数据的新状态:
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. 删除行;

数据行可以用 DELETE 命令从表中删除。假设您对Hayward的天气不再感兴趣,那么您可以用下面的方法把那些行从表中删除:
mydb#DELETE FROM weather WHERE city = 'Hayward';

我们用下面形式的语句的时候一定要小心
DELETE FROM tablename;

如果没有条件,DELETE 将从指定表中删除所有行,把它清空。做这些之前系统不会请求您确认!


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

posted @ 2008-07-04 09:12 Fingki.li 阅读(1025) | 评论 (0)编辑 收藏

linux下查看系统版本命令:

head -n 1 /etc/issue

posted @ 2008-07-03 15:59 Fingki.li 阅读(794) | 评论 (0)编辑 收藏

仅列出标题
共8页: 上一页 1 2 3 4 5 6 7 8 下一页