??xml version="1.0" encoding="utf-8" standalone="yes"?>
Q?span style="color: #339966; font-family: ">一Q如何启动tomcat
1、在startup文g中添加如下语?br style="font-family: " />
set JAVA_HOME=c:\j2sdk1.4.0_01(视具体jdk安装入境军_)
set TOMCAT_HOME=d:\tomcat4.0(视具体tomcat安装路径军_)
2、双击tomcat下的bin文g夹中的startup文gQ启动tomcatQ启动完毕后Q?br style="font-family: " />
打开览器,输入http://localhost:8080/然后回R卛_Q若出现tomcat主页Q则tomcat
配置成功Q否l箋配置W一?br />
Q二Q如何配|一个web应用
打开在conf文g夹中server.xml文g,扑ֈ如下的xml标记
<Host name="localhost" debug="0" appBase="webapps" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="common"/>
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="localhost_log." suffix=".txt"
<Context path="/manager" docBase="manager"
debug="0" privileged="true"/>
<!-- Tomcat Examples Context -->
<Context path="/examples" docBase="examples" debug="0"
reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_examples_log." suffix=".txt"
timestamp="true"/>
<Ejb name="ejb/EmplRecord" type="Entity"
home="com.wombat.empl.EmployeeRecordHome"
remote="com.wombat.empl.EmployeeRecord"/>
<Environment name="maxExemptions" type="java.lang.Integer"
value="15"/>
<Parameter name="context.param.name" value="context.param.value"
override="false"/>
<Resource name="jdbc/EmployeeAppDb" auth="SERVLET"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/EmployeeAppDb">
<parameter><name>user</name><value>sa</value></parameter>
<parameter><name>password</name><value></value></parameter>
<parameter><name>driverClassName</name>
<value>org.hsql.jdbcDriver</value></parameter>
<parameter><name>driverName</name>
<value>jdbc:HypersonicSQL:database</value></parameter>
</ResourceParams>
<Resource name="mail/Session" auth="Container"
type="javax.mail.Session"/>
<ResourceParams name="mail/Session">
<parameter>
<name>mail.smtp.host</name>
<value>localhost</value>
</parameter>
</ResourceParams>
</Context>
</Host>
?lt;Host>元素?有Context子元?该子元素代表一个web应用的配|?
从上可知,该host配置了两个web应用分别?
<Context path="/manager" docBase="manager"
debug="0" privileged="true"/>
?br style="font-family: " />
<Context path="/examples" docBase="examples" debug="0"
reloadable="true" crossContext="true">
...
</Context>
要配|自qweb应用,也需要添加一个Context,比如向配|自qmyservletq个web
应用,首先,把myservlet站点目录复制到tomcat的webapps目录?然后在server.xml文g
中的<Host>元素下添加一个Context子元素配|?br style="font-family: " />
如下:
<Context path="/myservlet" docBase="myservlet"
debug="0" privileged="true"/>
SQL分类Q?/span>
DDL?/span>数据定义语言(CREATEQ?/span>ALTERQ?/span>DROPQ?/span>DECLARE)
DML?/span>数据操纵语言(SELECTQ?/span>DELETEQ?/span>UPDATEQ?/span>INSERT)
DCL?/span>数据控制语言(GRANTQ?/span>REVOKEQ?/span>COMMITQ?/span>ROLLBACK)
首先,要介l基语句Q?/span>
1、说明:创徏数据?/span>
CREATE DATABASE database-name
2、说明:删除数据?/span>
drop database dbname
3、说明:备䆾sql server
--- 创徏 备䆾数据?/span> device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开?/span> 备䆾
BACKUP DATABASE pubs TO testBack
4、说明:创徏新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
Ҏ已有的表创徏新表Q?/span>
AQ?/span>create table tab_new like tab_old (使用旧表创徏新表)
BQ?/span>create table tab_new as select col1,col2… from tab_old definition only
5、说明:
删除新表Q?/span>drop table tabname
6、说明:
增加一个列Q?/span>Alter table tabname add column col type
注:列增加后不能删除?/span>DB2中列加上后数据类型也不能改变Q唯一能改变的是增?/span>varcharcd的长度?/span>
7、说明:
d主键Q?/span>Alter table tabname add primary key(col)
说明Q?/span>
删除主键Q?/span>Alter table tabname drop primary key(col)
8、说明:
创徏索引Q?/span>create [unique] index idxname on tabname(col….)
删除索引Q?/span>drop index idxname
注:索引是不可更改的Q想更改必须删除重新建?/span>
9、说明:
创徏视图Q?/span>create view viewname as select statement
删除视图Q?/span>drop view viewname
10、说明:几个单的基本?/span>sql语句
选择Q?/span>select * from table1 where 范围
插入Q?/span>insert into table1(field1,field2) values(value1,value2)
删除Q?/span>delete from table1 where 范围
更新Q?/span>update table1 set field1=value1 where 范围
查找Q?/span>select * from table1 where field1 like ’%value1%’ ---like的语法很_֦Q查资料!
排序Q?/span>select * from table1 order by field1,field2 [desc]
LQ?/span>select count * as totalcount from table1
求和Q?/span>select sum(field1) as sumvalue from table1
q_Q?/span>select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最:select min(field1) as minvalue from table1
11、说明:几个高查询q算?/span>
AQ?/span> UNION q算W?/span>
UNION q算W通过l合其他两个l果表(例如 TABLE1 ?/span> TABLE2Qƈ消去表中M重复行而派生出一个结果表。当 ALL ?/span> UNION 一起用时Q即 UNION ALLQ,不消除重复行。两U情况下Q派生表的每一行不是来?/span> TABLE1 是来自 TABLE2?/span>
BQ?/span> EXCEPT q算W?/span>
EXCEPT q算W通过包括所有在 TABLE1 中但不在 TABLE2 中的行ƈ消除所有重复行而派生出一个结果表。当 ALL ?/span> EXCEPT 一起用时 (EXCEPT ALL)Q不消除重复行?/span>
CQ?/span> INTERSECT q算W?/span>(intersect)
INTERSECT q算W通过只包?/span> TABLE1 ?/span> TABLE2 中都有的行ƈ消除所有重复行而派生出一个结果表。当 ALL ?/span> INTERSECT 一起用时 (INTERSECT ALL)Q不消除重复行?/span>
注:使用q算词的几个查询l果行必L一致的?/span>
12、说明:使用外连?/span>
A?/span>left outer joinQ?/span>
左外q接Q左q接Q:l果集几包括q接表的匚w行,也包括左q接表的所有行?/span>
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
BQ?/span>right outer join:
叛_q接(双?/span>)Q结果集既包括连接表的匹配连接行Q也包括双接表的所有行?/span>
CQ?/span>full outer joinQ?/span>
全外q接Q不仅包括符可接表的匹配行Q还包括两个q接表中的所有记录?/span>
其次Q大家来看一些不错的sql语句
1、说明:复制?/span>(只复制结?/span>,源表名:a 新表名:b) (Access可用)
法一Q?/span>select * into b from a where 1<>1
法二Q?/span>select top 0 * into b from a
2、说明:拯?/span>(拯数据,源表名:a 目标表名Q?/span>b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、说明:跨数据库之间表的拯(具体数据使用l对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据?/span>’ where 条g
例子Q?/span>..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、说明:子查?/span>(表名1Q?/span>a 表名2Q?/span>b)
select a,b,c from a where a IN (select d from b ) 或?/span>: select a,b,c from a where a IN (1,2,3)
5、说明:昄文章、提交h和最后回复时?/span>
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、说明:外连接查?/span>(表名1Q?/span>a 表名2Q?/span>b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、说明:在线视图查询(表名1Q?/span>a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、说明:between的用?/span>,between限制查询数据范围时包括了边界?/span>,not between不包?/span>
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数?/span>1 and 数?/span>2
9、说明:in 的用方?/span>
select * from table1 where a [not] in (‘?/span>
10、说明:两张兌表,删除主表中已l在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、说明:四表联查问题Q?/span>
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、说明:日程安排提前五分钟提?/span>
SQL: select * from 日程安排 where datediff('minute',f开始时?/span>,getdate())>5
13、说明:一?/span>sql 语句搞定数据库分?/span>
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
14、说明:?/span>10条记?/span>
select top 10 * form table1 where 范围
15、说明:选择在每一l?/span>b值相同的数据中对应的a最大的记录的所有信?/span>(cMq样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成l排?/span>,{等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB?/span>TableC 中的行ƈ消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、说明:随机取出10条数?/span>
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'
21、说明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')
22、说明:列示type?/span>vender?/span>pcs字段Q以type字段排列Q?/span>case可以方便地实现多重选择Q类?/span>select 中的case?/span>
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
昄l果Q?/span>
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择?/span>10?/span>15的记?/span>
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
随机选择数据库记录的ҎQ?/span>Randomize函数Q通过SQL语句实现Q?/span>
对存储在数据库中的数据来_随机数特性能l出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机?/span>”然后打印出来。实际上常见的解x案是建立如下所C的循环Q?/span>
Randomize
RNumber = Int(Rnd*499) +1
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... q里是执行脚?/span> ...
end if
objRec.MoveNext
Wend
q很Ҏ理解。首先,你取?/span>1?/span>500范围之内的一个随机数Q假?/span>500是数据库内记录的LQ。然后,你遍历每一记录来测?/span>ID 的倹{检查其是否匚wRNumber。满x件的话就执行?/span>THEN 关键字开始的那一块代码。假如你?/span>RNumber {于495Q那么要循环一遍数据库q旉可就长了。虽?/span>500q个数字看v来大了些Q但相比更ؓE_的企业解x案这q是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不死定了Q?/span>
采用SQLQ你可以很快地扑և准确的记录ƈ且打开一个只包含该记录的recordsetQ如下所C:
Randomize
RNumber = Int(Rnd*499) + 1
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
不必写出RNumber ?/span>IDQ你只需要检查匹配情况即可。只要你对以上代码的工作满意Q你自可按需操作“随机”记录?/span>Recordset没有包含其他内容Q因此你很快p扑ֈ你需要的记录q样大大降低了处理旉?/span>
再谈随机?/span>
现在你下定决心要榨干Random 函数的最后一滴aQ那么你可能会一ơ取出多条随录或者想采用一定随围内的记录。把上面的标?/span>Random CZ扩展一下就可以?/span>SQL应对上面两种情况了?/span>
Z取出几条随机选择的记录ƈ存放在同一recordset内,你可以存储三个随机数Q然后查询数据库获得匚wq些数字的记录:
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3
假如你想选出10条记录(也许是每ơ页面装载时?/span>10条链接的列表Q,你可以用BETWEEN 或者数学等式选出W一条记录和适当数量的递增记录。这一操作可以通过好几U方式来完成Q但?/span> SELECT 语句只显CZU可能(q里?/span>ID 是自动生成的LQ:
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"
注意Q以上代码的执行目的不是查数据库内是否有9条ƈ发记录?/span>
随机d若干条记录,试q?/span>
Access语法Q?/span>SELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysql select * From 表名 Order By rand() Limit n
Access左连接语?/span>(最q开发要用左q接,Access帮助什么都没有,|上没有Access?/span>SQL说明,只有自己试, 现在C以备后查)
语法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...
使用SQL语句 ?/span>...代替q长的字W串昄
语法Q?/span>
SQL数据库:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
Access数据库:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;
Conn.Execute说明
ExecuteҎ
该方法用于执?/span>SQL语句。根?/span>SQL语句执行后是否返回记录集Q该Ҏ的用格式分Z下两U:
1Q执?/span>SQL查询语句Ӟ返回查询得到的记录集。用法ؓQ?/span>
Set 对象变量?/span>=q接对象.Execute("SQL 查询语言")
ExecuteҎ调用后,会自动创录集对象Qƈ查询结果存储在该记录对象中Q通过SetҎQ将记录集赋l指定的对象保存Q以后对象变量就代表了该记录集对象?/span>
2Q执?/span>SQL的操作性语aӞ没有记录集的q回。此时用法ؓQ?/span>
q接对象.Execute "SQL 操作性语?/span>" [, RecordAffected][, Option]
·RecordAffected 为可选项Q此出可攄一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过讉K该变量,可知道SQL语句队多条记录q行了操作?/span>
·Option 可选项Q该参数的取值通常?/span>adCMDTextQ它用于告诉ADOQ应该将ExecuteҎ之后的第一个字W解释ؓ命o文本。通过指定该参敎ͼ可执行更高效?/span>
·BeginTrans?/span>RollbackTrans?/span>CommitTransҎ
q三个方法是q接对象提供的用于事务处理的Ҏ?/span>BeginTrans用于开始一个事物;RollbackTrans用于回滚事务Q?/span>CommitTrans用于提交所有的事务处理l果Q即认事务的处理?/span>
事务处理可以一l操作视Z个整体,只有全部语句都成功执行后Q事务处理才成功;若其中有一个语句执行失败,则整个处理就失败,q恢复到处里前的状态?/span>
BeginTrans?/span>CommitTrans用于标记事务的开始和l束Q在q两个之间的语句Q就是作Z务处理的语句。判断事务处理是否成功,可通过q接对象?/span>Error集合来实玎ͼ?/span>Error集合的成员个C?/span>0Q则说明有错误发生,事务处理p|?/span>Error集合中的每一?/span>Error对象Q代表一个错误信息?/span>
前两章我们了解了CSS的语法,但要惛_览器中昄出效果,p让浏览器识别q调用。当览器读取样式表Ӟ要依照文本格式来读,q里介绍四种在页面中插入样式表的ҎQ链入外部样式表、内部样式表、导入外表样式表和内嵌样式?/p>
1. 铑օ外部样式?/p>
铑օ外部样式表是把样式表保存Z个样式表文gQ然后在面中用<link>标记链接到这个样式表文gQ这?lt;link>标记必须攑ֈ面?lt;head>区内Q如下:
<head>
……
<link rel="stylesheet" type="text/css" href="mystyle.css">
……
</head>
上面q个例子表示览器从mystyle.css文g中以文档格式d定义的样式表。rel=”stylesheet”是指在页面中使用q个外部的样式表。type=”text/css”是指文g的类型是样式表文本。href=”mystyle.css”是文件所在的位置?/p>
一个外部样式表文g可以应用于多个页面。当你改变这个样式表文gӞ所有页面的样式都随之而改变。在制作大量相同样式面的网站时Q非常有用,不仅减少了重复的工作量,而且有利于以后的修改、编辑,览时也减少了重复下载代码?/p>
样式表文件可以用M文本~辑器(例如Q记事本Q打开q编辑,一般样式表文g扩展名ؓ.css。内Ҏ定义的样式表Q不包含HTML标记Qmystyle.cssq个文g的内容如下:
hr {color: sienna}
p {margin-left: 20px}
body {background-image: url("images/back40.gif")}
Q定义水q线的颜色ؓ土黄Q段落左边的I白边距?0象素Q页面的背景囄为images目录下的back40.gif文gQ?/p>
2. 内部样式?/p>
内部样式表是把样式表攑ֈ面?lt;head>区里Q这些定义的样式应用到面中了Q样式表是用<style>标记插入的,从下例中可以看出<style>标记的用法:
<head>
……
<style type="text/css">
hr {color: sienna}
p {margin-left: 20px}
body {background-image: url("images/back40.gif")}
</style>
……
</head>
注意Q有些低版本的浏览器不能识别style标记Q这意味着低版本的览器会忽略style标记里的内容Qƈ把style标记里的内容以文本直接显C到面上。ؓ了避免这L情况发生Q我们用加HTML注释的方式(<!-- 注释 -->Q隐藏内容而不让它昄Q?br><head>
……
<style type="text/css">
<!--
hr {color: sienna}
p {margin-left: 20px}
body {background-image: url("images/back40.gif")}
-->
</style>
……
</head>
3. 导入外部样式?/p>
导入外部样式表是指在内部样式表的<style>里导入一个外部样式表Q导入时用@importQ看下面q个实例Q?br><head>
……
<style type=”text/css”>
<!--
@import “mystyle.css”
其他样式表的声明
-->
</style>
……
</head>
例中@import “mystyle.css”表示导入mystyle.css样式表,注意使用时外部样式表的\径。方法和铑օ样式表的Ҏ很相|但导入外部样式表输入方式更有优势。实质上它相当于存在内部样式表中的?br>注意Q导入外部样式表必须在样式表的开始部分,在其他内部样式表上面?/p>
4. 内嵌样式
内嵌样式是合在HTML标记里用的Q用q种ҎQ可以很单的Ҏ个元素单独定义样式。内嵌样式的使用是直接将在HTML标记里加入style参数。而style参数的内容就是CSS的属性和|如下例:
<p style="color: sienna; margin-left: 20px">
q是一个段?br></p>
Q这个段落颜色ؓ土黄Q左边距?0象素Q?br>在style参数后面的引号里的内容相当于在样式表大括号里的内宏V?br>注意Qstyle参数可以应用于Q意BODY内的元素Q包括BODY本事Q,除了BASEFONT、PARAM和SCRIPT?/p>
5. 多重样式表的叠加
上一章里我们已经提到样式表的层叠序Q这里我们讨论插入样式表的这几种Ҏ的叠加,如果在同一个选择器上使用几个不同的样式表Ӟq个属性值将会叠加几个样式表Q遇到冲H的地方会以最后定义的为准。例如,我们首先铑օ一个外部样式表Q其中定义了h3选择W的color 、text-alig和font-size属性:
h3
{
color: red;
text-align: left;
font-size: 8pt
}
Q标?的文字颜色ؓU色Q向左对齐;文字寸?号字Q?br>然后在内部样式表里也定义了h3选择W的text-align和font-size属性:
h3
{
text-align: right;
font-size: 20pt
}
Q标?文字向右寚wQ尺ؓ20号字Q?br>那么q个面叠加后的样式是Q?br>color: red;
text-align: right;
font-size: 20pt
Q文字颜色ؓU色Q向叛_齐;寸?0号字Q?br>字体颜色从外部样式表里保留下来,而对齐方式和字体寸都有定义Ӟ按照后定义的优先而依照内部样式表?br>注意Q依照后定义的优先,所以优先最高的是内嵌样式,内部样式表高于导入外部样式表Q链入的外部样式表和内部样式表之间是最后定义的优先U高?nbsp;
伪类可以看做是一U特D的c选择W,是能被支持CSS的浏览器自动所识别的特D选择W。它的最大的用处是可以寚w接在不同状态下定义不同的样式效果?/p>
1. 语法
伪类的语法是在原有的语法里加上一个伪c(pseudo-classQ:
selector:pseudo-class {property: value}
Q选择W?伪类 {属? 值}Q?br>伪类和类不同Q是CSS已经定义好的Q不能象c选择W一样随意用别的名字Q根据上面的语法可以解释为对象(选择W)在某个特D状态下Q伪c)的样式?/p>
c选择W及其他选择W也同样可以和伪cL用:
selector.class:pseudo-class {property: value}
Q选择W?c?伪类 {属? 值}Q?/p>
2. 锚的伪类
我们最常用的是4UaQ锚Q元素的伪类Q它表示动态链接在4U不同的状态:link、visited、active、hoverQ未讉K的链接、已讉K的链接、激z链接和鼠标停留在链接上Q。我们把它们分别定义不同的效果:
a:link {color: #FF0000; text-decoration: none} /* 未访问的链接 */
a:visited {color: #00FF00; text-decoration: none} /* 已访问的链接 */
a:hover {color: #FF00FF; text-decoration: underline} /* 鼠标在链接上 */
a:active {color: #0000FF; text-decoration: underline} /* Ȁz链?*/
Q上面这个例子中Q这个链接未讉K时的颜色是红色ƈ无下划线Q访问后是绿色ƈ无下划线Q激z链接时色ƈ有下划线Q鼠标在链接上时为色ƈ有下划线Q?
注意Q有时这个链接访问前鼠标指向链接时有效果Q而链接访问后鼠标再次指向链接时却无效果了。这是因Z把a:hover攑֜了a:visited的前面,q样的话׃后面的优先高,当访问链接后忽略了a:hover的效果。所以根据叠层顺序,我们在定义这些链接样式时Q一定要按照a:linkQ?a:visitedQ?a:hoverQ?a:actived的顺序书写?/p>
3. 伪类和类选择W?/p>
伪cdcȝ合v来用Q就可以在同一个页面中做几l不同的链接效果了,例如Q我们定义一l链接ؓU色Q访问后Ԍ另一lؓl色Q访问后为黄Ԍ
a.red:link {color: #FF0000}
a.red:visited {color: #0000FF}
a.blue:link {color: #00FF00}
a.blue:visited {color: #FF00FF}
现在应用在不同的链接上:
<a class="red" href="...">q是W一l链?lt;/a>
<a class="blue" href="...">q是W二l链?lt;/a>
4. 其他伪类
此外CSS2q定义了首字和首行(first-letter和first-lineQ的伪类Q可以对元素的首字或首行讑֮不同的样式?br>下面看这个例子,我们在段落标记里定义文本首字寸为默认大的3倍:
<style type=”text/css”>
p:first-letter {font-size: 300%}
</style>
……
<p>
q是一个段落,q个D落的首字被攑֤了?br></p>
我们再定义一个首行样式的例子Q?br><style type=”text/css”>
div:first-line {color: red}
</style>
……
<div>
<p>
q是D落的第一?br>q是D落的第二行
q是D落的第三行
</p>
</div>
Q上例中D落的第一行ؓU色Q第二、三行ؓ默认颜色Q?/p>
注意Q首字和首行的伪c需要IE5.5以上的版本支持?nbsp;
一、认识CSS
CSS是Cascading Style SheetsQ中文翻译ؓ“层叠样式?#8221;Q简U样式表Q它是一U制作网늚新技术?/p>
|页设计最初是用HTML标记来定义页面文档及格式Q例如标?lt;h1>、段?lt;p>、表?lt;table>、链?lt;a>{,但这些标C能满x多的文档样式需求,Z解决q个问题Q在1997qW3C(The World Wide Web Consortium)颁布HTML4标准的同时也公布了有x式表的第一个标准CSS1, 自CSS1的版本之后,又在1998q?月发布了CSS2版本Q样式表得到了更多的充实。W3C把DHTML(Dynamic HTML)分ؓ三个部分来实玎ͼ脚本语言(包括JavaScript、Vbscript{?、支持动态效果的览?包括Internet Explorer、Netscape Navigator{?和CSS样式表?/p>
注意QCSS需要IE4(Internet Explorer 4.0)和NC4(Netscape 4.0)以上的浏览器支持Q有些效果需要更高版本的览器支持?/p>
二、语?/p>
1. 基本语法
CSS的定义是׃个部分构成:选择W(selectorQ,属性(propertiesQ和属性的取|valueQ?br>基本格式如下Q?br>selector {property: value}
Q选择W?{属性:值}Q?br>选择W是可以是多UŞ式,一般是你要定义样式的HTML标记Q例如BODY、P、TABLE……Q你可以通过此方法定义它的属性和|属性和D用冒号隔开Q?br>body {color: black}
选择Wbody是指面M部分Qcolor是控制文字颜色的属性,black是颜色的|此例的效果是佉K面中的文字ؓ黑色?/p>
如果属性的值是多个单词l成Q必dg加引P比如字体的名U经常是几个单词的组合:
p {font-family: "sans serif"}
Q定义段落字体ؓsans serifQ?/p>
如果需要对一个选择W指定多个属性时Q我们用分号将所有的属性和值分开Q?br>p {text-align: center; color: red}
Q段落居中排列;q且D落中的文字为红Ԍ
Z使你定义的样式表方便阅读Q你可以采用分行的书写格式:
p
{
text-align: center;
color: black;
font-family: arial
}
Q段落排列居中,D落中文字ؓ黑色Q字体是arialQ?/p>
2. 选择W组
你可以把相同属性和值的选择W组合v来书写,用逗号选择W分开Q这样可以减样式重复定义:
h1, h2, h3, h4, h5, h6 { color: green }
Q这个组里包括所有的标题元素Q每个标题元素的文字都ؓl色Q?br>p, table{ font-size: 9pt }
Q段落和表格里的文字寸?号字Q?br>效果完全{效于:
p { font-size: 9pt }
table { font-size: 9pt }
3. c选择W?/p>
用类选择W你能够把相同的元素分类定义不同的样式,定义c选择W时Q在自定cȝ名称前面加一个点受假如你惌两个不同的段落,一个段落向叛_齐,一个段落居中,你可以先定义两个c:
p.right {text-align: right}
p.center {text-align: center}
然后用不在不同的D落里,只要在HTML标记里加入你定义的class参数Q?br><p class="right">
q个D落向右寚w?br></p>
<p class="center">
q个D落是居中排列的
</p>
注意Q类的名U可以是L英文单词或以英文开头与数字的组合,一般以其功能和效果要命名?/p>
c选择W还有一U用法,在选择W中省略HTML标记名,q样可以把几个不同的元素定义成相同的样式Q?br>.center {text-align: center}
Q定?center的类选择Wؓ文字居中排列Q?br>q样的类可以被应用到M元素上。下面我们h1元素Q标?Q和p元素Q段落)都归?#8220;center”c,q两个元素的样式都跟随“.center”q个c选择W:
<h1 class="center">
q个标题是居中排列的
</h1>
<p class="center">
q个D落也是居中排列?br></p>
注意Q这U省略HTML标记的类选择W是我们l后最常用的CSSҎQ用这U方法,我们可以很方便的在Q意元素上套用预先定义好的cL式?/p>
4. ID选择W?/p>
在HTML面中ID参数指定了某个单一元素QID选择W是用来对这个单一元素定义单独的样式?br>ID选择W的应用和类选择W类|只要把CLASS换成ID卛_。将上例中类用ID替代Q?br><p id="intro">
q个D落向右寚w
</p>
定义ID选择W要在ID名称前加上一?#8220;#”受和c选择W相同,定义ID选择W的属性也有两U方法。下面这个例子,ID属性将匚w所有id="intro"的元素:
#intro
{
font-size:110%;
font-weight:bold;
color:#0000ff;
background-color:transparent
}
Q字体尺ؓ默认寸?10%Q粗体;蓝色Q背景颜色透明Q?br>下面q个例子QID属性只匚wid="intro"的段落元素:
p#intro
{
font-size:110%;
font-weight:bold;
color:#0000ff;
background-color:transparent
}
注意QID选择W局限性很大,只能单独定义某个元素的样式,一般只在特D情况下使用?/p>
5. 包含选择W?/p>
可以单独ҎU元素包含关pd义的样式表,元素1里包含元?Q这U方式只对在元素1里的元素2定义Q对单独的元?或元?无定义,例如Q?br>table a
{
font-size: 12px
}
在表格内的链接改变了样式Q文字大ؓ12象素Q而表格外的链接的文字仍ؓ默认大小?/p>
6. 样式表的层叠?/p>
层叠性就是承性,样式表的l承规则是外部的元素样式会保留下来承给q个元素所包含的其他元素。事实上Q所有在元素中嵌套的元素都会l承外层元素指定的属性|有时会把很多层嵌套的样式叠加在一P除非另外更改。例如在DIV标记中嵌套P标记Q?br>div { color: red; font-size:9pt}
……
<div>
<p>
q个D落的文字ؓU色9号字
</p>
</div>
QP元素里的内容会承DIV定义的属性)
注意Q有些情况下内部选择W不l承周围选择W的|但理Zq些都是Ҏ的。例如,上边界属性值是不会l承的,直觉上,一个段落不会同文档BODY一L上边界倹{?/p>
另外Q当样式表扉K到冲H时QL以最后定义的样式为准。如果上例中定义了P的颜Ԍ
div { color: red; font-size:9pt}
p {color: blue}
……
<div>
<p>
q个D落的文字ؓ蓝色9号字
</p>
</div>
我们可以看到D落里的文字大小?号字是承div属性的Q而color属性则依照最后定义的?/p>
不同的选择W定义相同的元素Ӟ要考虑C同的选择W之间的优先U。ID选择W,c选择W和HTML标记选择W,因ؓID选择W是最后加上元素上的,所以优先最高,其次是类选择W。如果想越q三者之间的关系Q可以用!important提升样式表的优先权,例如Q?br>p { color: #FF0000!important }
.blue { color: #0000FF}
#id1 { color: #FFFF00}
我们同时寚w面中的一个段落加上这三种样式Q它最后会依照?importantx的HTML标记选择W样式ؓU色文字。如果去?importantQ则依照优先权最高的ID选择Wؓ黄色文字?/p>
7. 注释
你可以在CSS中插入注释来说明你代码的意思,注释有利于你或别Z后编辑和更改代码时理解代码的含义。在览器中Q注释是不显C的。CSS注释?/*" 开_?*/" l尾Q如下:
/* 定义D落样式?*/
p
{
text-align: center; /* 文本居中排列 */
color: black; /* 文字为黑?*/
font-family: arial /* 字体为arial */
}
……………?br /> ……………?/p>
// 数据库操?br /> Context ctx=null;
Connection cnn=null;
Statement stmt=null;
ResultSet rs=null;
try
{
ctx=new InitialContext();
if(ctx==null)
throw new Exception("没有匚w的环?);
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
if(ds==null)
throw new Exception("没有匚w数据?);
cnn=ds.getConnection();
stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery("select * from table1");
……………?br /> ……………?/p>
}
finally
{
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(cnn!=null)
cnn.close();
if(ctx!=null)
ctx.close();
}
%>
</body>
</html>
代码说明Q?br />DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
上面q句应用了刚才设的资源?br />资源使用完要释放Q尤其是Context资源Q见try-catch-finally部分的finally代码D,q是一U好的习惯。资源释放时如果释放了上U资源,下资源先被释放。如Q释放了ctxQ那么资源释N序将是rsQstmtQcnnQctx。换句话_如果释放了ctxQ那么rsQstmt和cnn都将不可用了?br />q里的释放资源只是将数据库连接返回连接池中,q不是把资源真正释放掉,见数据库q接池概q?/p>
NOTICEQ有多种写法Q比如联接查询写法:
SELECT SNAME
FROM S,SC,C
WHERE SEX=‘F?AND SC.S#=S.S#
AND SC.C#=C.C#
AND TEACHER='LIU'
但上一U写法更好一些?
Q?Q检索WANG同学不学的课E的评受?/font>
SELECT C#
FROM C
WHERE C# NOT IN
(SELECT C#
FROM SC
WHERE S# IN
(SELECT S#
FROM S
WHERE SNAME='WANG'))
Q?Q检索至选修两门评的学生学受?/font>
SELECT DISTINCT X.SNO
FROM SC X,SC Y
WHERE X.SNO=Y.SNO AND X.CNO<>Y.CNO
Notice:对表SCq行自连接,XQY是SC的两个别名?
Q?Q检索全部学生都选修的课E的评号与评名?/font>
SELECT C#,CNAME
FROM C
WHERE NOT EXISTS
(SELECT *
FROM S
WHERE S# NOT IN
(SELECT *
FROM SC
WHERE SC.C#=C.C#))
要从语义上分解:Q?Q选择评的课E号与课E名Q不存在不选这门课的同学?
其中Q“不选这门课的同学”可以表CZؓQ?/font>
SELECT * FROM S WHERE S# NOT IN QSELECT * FROM SC WHERE SC.C#=C.C#)
|
或?/b> |
SELECT * FROM S WHERE NOT EXISTS QSELECT * FROM SC WHERE S.S#=C.S# AND SC.C#=C.C# )
|
Q?Q检索选修评包含LIU老师所授课的学生学受?/font>
SELECT DISTINCT S#
FROM SC
WHERE C# IN
(SELECT C#
FROM C
WHERE TEACHER='LIU'))
3.3 设有两个基本表RQAQBQCQ和SQDQEQFQ,试用SQL查询语句表达下列关系代数表达式:
Q?QπA(R) (2)σB='17'(R) (3)R×S (4))πA,F(σC=D(R×S))
(1)SELECT A FROM R
(2)SELECT * FROM R WHERE B='17'
(3)SELECT A,B,C,D,E,F FROM R,S
(4)SELECT A,F FROM R,S WHERE R.C=S.D
3.4 3.4 设有两个基本表RQAQBQCQ和SQAQBQCQ试用SQL查询语句表达下列关系代数表达式:
Q?QR∪S Q?QR∩S Q?QRQS Q?QπA,B(R)πB,C(S)
(1)SELECT A,B,C
FROM R
UNION
SELECT A,B,C
FROM S
(2)SELECT A,B,C
FROM R
INTERSECT
SELECT A,B,C
FROM S
(3)SELECT A,B,C
FROM R
WHERE NOT EXISTS
(SELECT A,B,C
FROM S
WHERE R.A=S.A AND R.B=S.B AND R.C=S.C)
(4)SELECT R.A,R.B,S.C
FROM R,S
WHERE R.B=S.B
3.5 试叙qSQL语言的关pM数特点和元组演算特点?
QP61-62Q?
3.6 试用SQL查询语句表达下列Ҏ学数据库中三个基本表S、SC、C的查询:
Q?Q统计有学生选修的课E门数?
SELECT COUNT(DISTINCT C#) FROM SC
Q?Q求选修C4评的学生的q_q龄?
SELECT AVG(AGE)
FROM S
WHERE S# IN
(SELECT S#
FROM SC
WHERE C#='C4')
或者,
SELECT AVG(AGE)
FROM SQSC
WHERE S.S#=SC.S# AND C#='004'
Q?Q求LIU老师所授课E的每门评的学生^均成l?
SELECT CNAME,AVG(GRADE)
FROM SC ,C
WHERE SC.C#=C.C# AND TEACHER='LIU'
GROUP BY C#
Q?Q统计每门课E的学生选修人数Q超q?0人的评才统计)。要求输E号和选修人数Q?查询l果按h数降序排列,若h数相同,按课E号升序排列?
SELECT DISTINCT C#,COUNT(S#)
FROM SC
GROUP BY C#
HAVING COUNT(S#)>10
ORDER BY 2 DESC, C# ASC
Q?Q检索学hWANG同学大,而年龄比他小的学生姓名?
SELECT X.SNAME
FROM S AS X, S AS Y
WHERE Y.SNAME='WANG' AND X.S#>Y.S# AND X.AGE<Y.AGE
Q?Q检索姓名以WANG打头的所有学生的姓名和年龄?
SELECT SNAME,AGE
FROM S
WHERE SNAME LIKE 'WANG%'
Q?Q在SC中检索成lؓI值的学生学号和课E号?
SELECT S#,C#
FROM SC
WHERE GRADE IS NULL
Q?Q求q龄大于奛_学^均年龄的男学生姓名和q龄?
SELECT SNAME,AGE
FROM S AS X
WHERE X.SEX='? AND X.AGE>(SELECT AVG(AGE) FROM S AS Y WHERE Y.SEX='?)
Q?Q求q龄大于所有女同学q龄的男学生姓名和年龄?
SELECT SNAME,AGE
FROM S AS X
WHERE X.SEX='? AND X.AGE>ALL (SELECT AGE FROM S AS Y WHERE Y.SEX='?)
3.7 试用SQL更新语句表达Ҏ学数据库中三个基本表S、SC、C的各个更新操作:
Q?Q往基本表S中插入一个学生元l(‘S9’,‘WU’,18Q?/font>
INSERT INTO S(S#,SNAME,AGE) VALUES('59','WU',18)
Q?Q在基本表S中检索每一门课E成l都大于{于80分的学生学号、姓名和性别Q?q把索到的值送往另一个已存在的基本表STUDENTQSQ,SANMEQSEXQ?/font>
INSERT INTO STUDENT(S#,SNAME,SEX)
SELECT S#,SNAME,SEX
FROM S WHERE NOT EXISTS
(SELECT * FROM SC WHERE
GRADE<80 AND S.S#=SC.S#)
Q?Q在基本表SC中删除尚无成l的选课元组?/font>
DELETE FROM SC
WHERE GRADE IS NULL
Q?Q把WANG同学的学习选课和成l全部删厅R?/font>
DELETE FROM SC
WHERE S# IN
(SELECT S#
FROM S
WHERE SNAME='WANG')
Q?Q把选修MATHS课不及格的成l全改ؓI倹{?/font>
UPDATE SC
SET GRADE=NULL
WHERE GRADE<60 AND C# IN
(SELECT C#
FROM C
WHERE CNAME='MATHS')
Q?Q把低于d^均成l的奛_学成l提?%?/font>
UPDATE SC
SET GRADE=GRADE*1.05
WHERE GRADE<(SELECT AVG(GRADE) FROM SC) AND S# IN (SELECT S# FROM S WHERE SEX='F')
Q?Q在基本表SC中修改C4评的成l,若成l小于等?5分时提高5%Q?若成l大?5分时提高4%Q用两个UPDATE语句实现Q?/font>
UPDATE SC
SET GRADE=GRADE*1.05
WHERE C#='C4' AND GRADE<=75
UPDATE SC
SET GRADE=GRADE*1.04
WHERE C#='C4' AND GRADE>75
3.8 在第1章例1.4中提到“仓库管理”关pL型有五个关系模式Q?
零g PARTQPQ,PNAMEQCOLORQWEIGHTQ?
目 PROJECTQJQ,JNAMEQDATEQ?
供应商 SUPPLIERQSQ,SNAMEQSADDRQ?
供应 PQPQJQ,PQ,TOTOALQ?
采购 PQSQPQ,SQ,QUANTITYQ?
Q?Q试用SQL DDL语句定义上述五个基本表,q说明主键和外键?/font>
CREATE TABLE PART
(P# CHAR(4) NOT NULL,PNAME CHAR(12) NOT NULL,
COLOR CHAR(10),WEIGHT REAL,
PRIMARY KEY(P#))
CREATE TABLE PROJECT
(J# CHAR(4) NOT NULL,JNAME CHAR(12) NOT NULL,
DATE DATE,
PRIMARY KEY(J#))
CREATE TABLE SUPLIER
(S# CHAR(4) NOT NULL,SNAME CHAR(12),SADDR VARCHAR(20),
PRIMARY KEY(S#))
CREATE TABLE P_P
(J# CHAR(4),P# CHAR(4),TOTAL INTEGER,
PRIMARY KEY(J#,P#),
FOREIGN KEY(J#) REFERENCE PROJECT(J#),
FOREIGN KEY(P#) REFERENCE PART(P#))
CREATE TABLE P_S
(P# CHAR(4),S# CHAR(4),QUANTITY INTEGER,
PRIMARY KEY(P#,S#),
FOREIGN KEY(P#) REFERENCE PART(P#),
FOREIGN KEY(S#) REFERENCE SUPLIER(S#))
Q?Q试PROGECT、PQP、PART三个基本表的自然联接定义Z个视图VIEW1QPART、PQS、SUPPLIER 三个基本表的自然联接定义Z个视图VIEW2?/font>
CREATE VIEW VIEW1(J#,JNAME,DATE,P#,PNAME,COLOR,WEIGHT,TOTAL)
AS SELECT PROJECT.J#,JNAME,DATE,PART.P#,PNAME,COLOR,WEIGHT,TOTAL
FROM PROJECT,PART,P_P
WHERE PART.P#=P_P.P# AND P_P.J#=PROJECT.J#
CREATE VIEW VIEW2(P#,PNAME,COLOR,WEIGHT,S#,SNAME,SADDR,QUANTITY)
AS SELECT PART.P#,PNAME,COLOR,WEIGHT,SUPPLIER.S#,SNAME,SADDR,QUANTITY
FROM PART,P_S,SUPPLIER
WHERE PART.P#=P_S.P# AND P_S.S#=SUPPLIER.S#
Q?Q试在上qC个视囄基础上进行数据查询:
1Q检索上L供应商所供应的零件的~号和名字?
SELECT P#,PNAME FROM VIEW2 WHERE SADDR='SHANGHAI'
2Q检索项目J4所用零件的供应商编号和名字?
SELECT S#,SNAME FROM VIEW2 WHERE P# IN(SELECT P# FROM VIEW1 WHERE J#='J4')
3.9 对于教学数据库中基本表SCQ已建立下列视图Q?
CREATE VIEW SQGRADEQSQ,CQNUMQAVGQGRADEQ?
AS SELECT SQ,COUNT(CQ?QAVGQGRADEQ?
FROM SC
GROUP BY SQ?
试判断下列查询和更新是否允许执行。若允许Q写{换到基本表SC上的相应操作?
Q?Q?SELECT *
FROM SQGRADE
允许
SELECT S#,COUNT(C#),AVG(GRADE) FROM SC GROUP BY S#
Q?Q?SELECT SQ,CQNUM
FROM SQGRADE
WHERE AVGQGRADEQ?0
允许
SELECT S#,COUNT(C#) FROM SC WHERE AVG(GRADE)>80
Q?Q?SELECT SQ,AVGQGRADE
FROM SQGRADE
WHERE CQNUMQ?SELECT CQNUM
FROM SQGRADE
WHERE SQ=‘S4?
允许
SELECT S#,AVG(GRADE)
FROM SC AS X
WHERE COUNT(X.C#)>(SELECT COUNT(Y.C#) FROM SC AS Y WHERE Y.S#='S4')
GROUP BY S#
Q?Q?UPDATE SQGRADE
SET CQNUMQCQNUMQ?
WHERE SQ=‘S4?/font>
不允?
Q?Q?DELETE FROM SQGRADE
WHERE CQNUMQ?
不允?
3.10 预处理方式对于嵌入式SQL的实现有什么重要意义?
预处理方式是先用预处理程序对源程序进行扫描,识别出SQL语句Qƈ处理成宿主语a的函数调用Ş式; 然后再用宿主语言的编译程序把源程序编译成目标E序。这P不用扩充宿主语言的编译程序, p处理SQL语句?
3.11 在宿主语a的程序中使用SQL语句有哪些规定?
在宿主语a的程序中使用SLQ语句有以下规定:
Q?Q在E序中要区分SQL语句与宿主语a语句
Q?Q允许嵌入的SQL语句引用宿主语言的程序变量(UCؓ׃n变量Q,但有两条规定Q?
1Q引用时Q这些变量前必须加“:”作为前~标识Q以CZ数据库中变量有区别?
2Q这些变量由宿主语言的程序定义,q用SQL的DECLARE语句说明?
Q?QSQL的集合处理方式与宿主语言单记录处理方式之间要协调?需要采用游标机Ӟ把集合操作{换成单记录处理方式?
3.12 SQL的集合处理方式与宿主语言单记录处理方式之间如何协调?
׃SQL语句处理的是记录集合Q而宿主语a语句一ơ只能处理一个记录, 因此需要用游标(cousor)机制Q把集合操作转换成单记录处理方式?
2.13 嵌入式SQL语句何时不必涉及到游标?何时必须涉及到游标?
(1)INSERT、DELETE、UPDATE语句Q查询结果肯定是单元l时的SELECT语句Q?都可直接嵌入在主E序中用,不必涉及到游标?
(2)当SELECT语句查询l果是多个元l时Q此时宿主语aE序无法使用Q?一定要用游标机制把多个元组一ơ一个地传送给宿主语言处理?