??xml version="1.0" encoding="utf-8" standalone="yes"?>
定义 Java Persistence API JPA通过JDK 5.0注解或XML描述对象Q关p表的映关p,q将q行期的实体对象持久化到数据库中? h Sun引入新的JPA ORM规范Z两个原因Q其一Q简化现有Java EE和Java SE应用的对象持久化的开发工作;其二QSun希望整合对ORM技术,实现天下归一?/p>
JPA由EJB 3.0软g专家l开发,作ؓJSR-220实现的一部分。但它不囿于EJB 3.0Q你可以在Web应用、甚x面应用中使用。JPA的宗旨是为POJO提供持久化标准规范,由此可见Q经q这几年的实跉|索,能够q容器独立q?行,方便开发和试的理念已l深入h心了。目前Hibernate 3.2、TopLink 10.1.3以及OpenJPA都提供了JPA的实现?/p>
JPA的M思想和现有Hibernate、TopLinkQJDO{ORM框架大体一致。ȝ来说QJPA包括以下3斚w的技术: ORM映射元数?/p>
JPA支持XML和JDK 5.0注解两种元数据的形式Q元数据描述对象和表之间的映关p,框架据此实体对象持久化到数据库表中Q?/p>
JPA 的API 用来操作实体对象Q执行CRUD操作Q框架在后台替我们完成所有的事情Q开发者从J琐的JDBC和SQL代码中解脱出来?/p>
查询语言 q是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据Q避免程序的SQL语句紧密耦合? JPA的优?/p>
1 标准?/p>
JPA ?JCP l织发布?Java EE 标准之一Q因此Q何声U符?JPA 标准的框枉遵@同样的架构,提供相同的访?APIQ这保证了基于JPA开发的企业应用能够l过量的修改就能够在不同的JPA框架下运行?/p>
2 对容器Ҏ的支持 JPA 框架中支持大数据集、事务、ƈ发等容器U事务,q?JPA 越了简单持久化框架的局限,在企业应用发挥更大的作用?/p>
3 单易用,集成方便 JPA的主要目标之一是提供更加单的~程模型Q在JPA框架下创建实体和创徏Java cML单,没有M的约束和限制Q只需要?javax.persistence.Entityq行注释QJPA的框架和接口也都非常单,没有太多特别的规则和设计模式的要求,开发者可以很Ҏ?掌握。JPAZ非R入式原则设计Q因此可以很Ҏ的和其它框架或者容器集成?/p>
4 可媲JDBC的查询能?/p>
JPA的查询语a是面向对象而非面向数据库的Q它以面向对象的自然语法构造查询语句,可以看成 是Hibernate HQL的等L。JPA定义了独特的JPQLQJava Persistence Query LanguageQ,JPQL是EJB QL的一U扩展,它是针对实体的一U查询语aQ操作对象是实体Q而不是关pL据库的表Q而且能够支持扚w更新和修攏VJOIN、GROUP BY、HAVING {通常只有 SQL 才能够提供的高查询Ҏ,甚至q能够支持子查询?/p>
5 支持面向对象的高U特?/p>
JPA 中能够支持面向对象的高Ҏ,如类之间的ѝ多态和cM间的复杂关系Q这L支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化? JPA的供应商 JPA 的目标之一是制定一个可以由很多供应商实现的APIQƈ且开发h员可以编码来实现该APIQ而不是用私有供应商Ҏ的API。因此开发h员只需使用供应 商特有的API来获得JPA规范没有解决但应用程序中需要的功能。尽可能C用JPA APIQ但是当需要供应商公开但是规范中没有提供的功能Ӟ则用供应商Ҏ的API?/p>
1 Hibernate JPA是需要Provider来实现其功能的,Hibernate是JPA Provider中很强的一个,目前来说应该无h能出其右。从功能上来_JPA现在是Hibernate功能的一个子集。Hibernate ?.2开始,开始兼容JPA。Hibernate3.2获得了Sun TCK的JPA(Java Persistence API) 兼容认证?/p>
只要熟悉Hibernate或者其他ORM框架Q在使用JPA时会发现其实非常Ҏ上手。例?实体对象的状态,在Hibernate有自由、持久、游MU,JPA里有newQmanagedQdetachedQremovedQ明gh一看就?道,q些状态都是一一对应的。再如flushҎQ都是对应的Q而其他的再如说Query query = manager.createQuery(sql)Q它在Hibernate里写法上是sessionQ而在JPA中变成了managerQ所以从 Hibernate到JPA的代价应该是非常的 同样QJDOQ也开始兼容JPA。在ORM的领域中Q看来JPA已经是王道,规范是规范。在各大厂商的支持下QJPA的用开始变得广泛?/p>
2 Spring Spring + Hibernate 常常被称?Java Web 应用人气最旺的框架l合。而在 JCP 通过?Web Beans JSR Q却Ʋ将JSF + EJB + JPA 、来?JBoss SeamQSpring 除外Q的一些组件和EJB 3Q目前能够提供有基本拦截和依赖注入功能的?Session Bean 框架Q的一?Web l合q行标准化。如今的 Spring 2.0 ?JPA 提供了完整的 EJB 容器契约Q允?JPA在Q何环境内可以?Spring 理的服务层使用Q包?Spring 的所?AOP ?DI 增强Q。同Ӟ关于下一个Web应用l合会是 EJB、Spring + Hibernate q是 Spring + JPA 的论战,早已充斥于耟?/p>
在Spring 2.0.1中,正式提供对JPA的支持,q也促成了JPA的发展,要知道JPA的好处在于可以分M容器q行Q变得更加的z?/p>
3 OpenJPA OpenJPA ?Apache l织提供的开源项目,它实C EJB 3.0 中的 JPA 标准Qؓ开发者提供功能强大、用简单的持久化数据管理框架。OpenJPA 装了和关系型数据库交互的操作,让开发者把注意力集中在~写业务逻辑上。OpenJPA 可以作ؓ独立的持久层框架发挥作用Q也可以L的与其它 Java EE 应用框架或者符?EJB 3.0 标准的容器集成?/p>
4 其它 目前支持的实现包括Toplink、Hibernate Entitymanager{。TopLink以前需要收费,如今开源了。OpenJPA虽然免费Q但功能、性能、普及性等斚w更加需要加大力度?/p>
对于EJB来说Q实体Bean一直是被批评的对象Q由于其太复杂和庞大。JPA的出玎ͼ很大E度的分M复杂性。这让EJB的推q也变得Ҏ?/p>
总而言之,JPA规范主要x的仅是API的行为方面,而由各种实现完成大多数性能有关的调优。尽如此,所有可靠的实现都应该拥有某U数据缓存,以作为选择。但愿不久的来QJPA能成为真正的标准?/p>
结 EJB 3.0和JPA 毫无疑问是Java EE 5的主要卖炏V在某些领域中,它们lJavaC带来了竞争优势,qJava 在其他领域与竞争Ҏ不分伯仲Q因为,不可否认Q目前某些领域尚不存在基于标准的ҎQ?/p>
q去数年来,Spring Framework一直是EJB在企业领域的主要竞争Ҏ。EJB3.0规范解决了很多促qSpring兴v的问题。随着它的出现QEJB3.0毫无疑问比Spring提供了更好的开发体验——最引h注目的优势是它不需要配|文件?/p>
JPA提供一U标准的OR映射解决ҎQ该解决Ҏ完全集成到EJB3?兼容的容器中。JPA的前辈将会l稳定发展,但是业务应用E序中的 raw 使用可能会减少。实?JPA 兼容的实体管理器g很可能是此类技术的发展方向?/p>
Java EEpd规范的较大问题与JPA没有M关系。Java EE pd规范的问题涉及到 Web和EJB容器之间的集成。Spring在此领域仍然h主要竞争优势。JBoss的Seam目试使用自定义的Ҏ来解册一问题。Caucho Resin应用服务器试图扩展容器边界ƈ支持在Web容器中用@EJB注释。我们希望Java EE 5.1解军_集成的问题,为我们提供一个全面而标准的依赖性注入方法?/p>
在不久的来QSun可能会将JPA作ؓ一个单独的JSR对待Q同时JPAq可能作为Java SE的一部分。不q这些都不太重要Q重要的是,我们现在已经可以在脱d器的情况下、在Java SE应用中用JPA了? JPA已经作ؓ一对象持久化的标准,不但可以获得Java EE应用服务器的支持Q还可以直接在Java SE中用。开发者将无需在现有多UORM框架中艰隑֜选择Q按照Sun的预惻I现有ORM框架头顶的光环将渐渐暗EQ不再具有以往的吸引力?/p>
值得注意的是Java Persistence APIq不是J2EE环境 专用Q而是在java中的通用API。意味着我们可以在Q何需要访问关pL据库的地方用JPAQ?/p>
甚至包括面应用。JPA也不要求一定在J2EE容器中才能运行,而是M有JVM的环境都可以q用? q就使得我们可以很容易的把JPA作ؓ一个持久化lg自由的和各种容器Q框ӞEJB3容器, Spring{等Q组合? JPA最主要的是一个统一的persistence.xml配置文gQ可以放到每一个jar的META-INF/目录下面Q配|内容主要有 Q以hibernateZQ?/p>
1、数据库q接的配|文?/p>
2、数据库方言、连接URL、用户名、密?/p>
3、ORM映射的列表(ClassQ?/p>
4、配|其它的Hibernate属性(其他的Provider属性) 5、cache 主要内容Q详l内容请看hibernate的reference xml 代码 spring配置 xml 代码 q样好了,可以使用entitymanagerQ每个jar里面可以怺不用影响Q而且q个也符合我们新q程改进推进的每个子pȝ用jar发布的原则,当然q里的还有作service层,对于子系l之间的交互Q我觉得Q原则上应该仅允总们在service的层面上q行Q在DAO之间不应该有怺的交叉,不过隐约?/p>
得还有很多东西要做,嗯,很晚了,肚子饿,明天再想Q呵?/p>
哦,对了QSpring真是好东西,装了这么多东西l我们用Q真是期待更好的版本出来啊, q有Q在j2se环境里,也可以通过代码的方式取得JPA的api java 代码
?:SQLServer和Oracle的常用函数对?/p>
1.l对?/p>
S:select abs(-1) value
O:select abs(-1) value from dual
2.取整(?
S:select ceiling(-1.001) value
O:select ceil(-1.001) value from dual
3.取整Q小Q?/p>
S:select floor(-1.001) value
O:select floor(-1.001) value from dual
4.取整Q截取)
S:select cast(-1.002 as int) value
O:select trunc(-1.002) value from dual
5.四舍五入
S:select round(1.23456,4) value 1.23460
O:select round(1.23456,4) value from dual 1.2346
6.e为底的幂
S:select Exp(1) value 2.7182818284590451
O:select Exp(1) value from dual 2.71828182
7.取e为底的对?/p>
S:select log(2.7182818284590451) value 1
O:select ln(2.7182818284590451) value from dual; 1
8.?0为底Ҏ
S:select log10(10) value 1
O:select log(10,10) value from dual; 1
9.取^?/p>
S:select SQUARE(4) value 16
O:select power(4,2) value from dual 16
10.取^Ҏ
S:select SQRT(4) value 2
O:select SQRT(4) value from dual 2
11.求Q意数为底的幂
S:select power(3,4) value 81
O:select power(3,4) value from dual 81
12.取随机数
S:select rand() value
O:select sys.dbms_random.value(0,1) value from dual;
13.取符?/p>
S:select sign(-8) value -1
O:select sign(-8) value from dual -1
----------数学函数
14.圆周?/p>
S:SELECT PI() value 3.1415926535897931
O:不知?/p>
15.sin,cos,tan 参数都以弧度为单?/p>
例如Qselect sin(PI()/2) value 得到1QSQLServerQ?/p>
16.Asin,Acos,Atan,Atan2 q回弧度
17.弧度角度互换(SQLServerQOracle不知?
DEGREESQ弧?〉角?/p>
RADIANSQ角?〉弧?/p>
---------数值间比较
18. 求集合最大?/p>
S:select max(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a
O:select greatest(1,-2,4,3) value from dual
19. 求集合最?/p>
S:select min(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a
O:select least(1,-2,4,3) value from dual
20.如何处理null?F2中的null?0代替)
S:select F1,IsNull(F2,10) value from Tbl
O:select F1,nvl(F2,10) value from Tbl
--------数值间比较
21.求字W序?/p>
S:select ascii('a') value
O:select ascii('a') value from dual
22.从序h字符
S:select char(97) value
O:select chr(97) value from dual
23.q接
S:select '11'+'22'+'33' value
O:select CONCAT('11','22')||33 value from dual
23.子串位置 --q回3
S:select CHARINDEX('s','sdsq',2) value
O:select INSTR('sdsq','s',2) value from dual
23.模糊子串的位|?--q回2,参数L中间%则返?
S:select patindex('%d%q%','sdsfasdqe') value
O:oracle没发玎ͼ但是instr可以通过W四N 刂瞥鱿执?BR> select INSTR('sdsfasdqe','sd',1,2) value from dual q回6
24.求子?/p>
S:select substring('abcd',2,2) value
O:select substr('abcd',2,2) value from dual
25.子串代替 q回aijklmnef
S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value
O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual
26.子串全部替换
S:没发?/p>
O:select Translate('fasdbfasegas','fa','? ) value from dual
27.长度
S:len,datalength
O:length
28.大小写{?lower,upper
29.单词首字母大?/p>
S:没发?/p>
O:select INITCAP('abcd dsaf df') value from dual
30.左补I格QLPAD的第一个参CؓI格则同space函数Q?/p>
S:select space(10)+'abcd' value
O:select LPAD('abcd',14) value from dual
31.双I格QRPAD的第一个参CؓI格则同space函数Q?/p>
S:select 'abcd'+space(10) value
O:select RPAD('abcd',14) value from dual
32.删除I格
S:ltrim,rtrim
O:ltrim,rtrim,trim
33. 重复字符?/p>
S:select REPLICATE('abcd',2) value
O:没发?/p>
34.发音怼性比?q两个单词返回gP发音相同)
S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')
O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual
SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差
q回0-4Q?为同韻I1最?/p>
--------------日期函数
35.pȝ旉
S:select getdate() value
O:select sysdate value from dual
36.前后几日
直接与整数相加减
37.求日?/p>
S:select convert(char(10),getdate(),20) value
O:select trunc(sysdate) value from dual
select to_char(sysdate,'yyyy-mm-dd') value from dual
38.求时?/p>
S:select convert(char(8),getdate(),108) value
O:select to_char(sysdate,'hh24:mm:ss') value from dual
39.取日期时间的其他部分
S:DATEPART ?DATENAME 函数 Q第一个参数决定)
O:to_char函数 W二个参数决?/p>
参数---------------------------------下表需要补?/p>
year yy, yyyy
quarter qq, q (季度)
month mm, m (m O无效)
dayofyear dy, y (O表星?
day dd, d (d O无效)
week wk, ww (wk O无效)
weekday dw (O不清?
Hour hh,hh12,hh24 (hh12,hh24 S无效)
minute mi, n (n O无效)
second ss, s (s O无效)
millisecond ms (O无效)
----------------------------------------------
40.当月最后一?/p>
S:不知?/p>
O:select LAST_DAY(sysdate) value from dual
41.本星期的某一天(比如星期日)
S:不知?/p>
O:SELECT Next_day(sysdate,7) vaule FROM DUAL;
42.字符串{旉
S:可以直接转或者select cast('2004-09-08'as datetime) value
O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;
43.求两日期某一部分的差Q比如秒Q?/p>
S:select datediff(ss,getdate(),getdate()+12.3) value
O:直接用两个日期相减(比如d1-d2=12.3Q?/p>
SELECT (d1-d2)*24*60*60 vaule FROM DUAL;
44.Ҏ差值求新的日期Q比如分钟)
S:select dateadd(mi,8,getdate()) value
O:SELECT sysdate+8/60/24 vaule FROM DUAL;
45.求不同时区时?/p>
S:不知?/p>
O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;
-----时区参数,北京在东8区应该是Ydt-------
AST ADT 大西z标准时?/p>
BST BDT 白oh准时?/p>
CST CDT 中部标准旉
EST EDT 东部标准旉
GMT 格林治标准旉
HST HDT 阿拉斯加—夏威夷标准旉
MST MDT 山区标准旉
NST U芬兰标准时?/p>
PST PDT 太^z标准时?/p>
YST YDT YUKON标准旉
Oracle支持的字W函数和它们的Microsoft SQL Server{h函数:
函数 Oracle Microsoft SQL Server
把字W{换ؓASCII ASCII ASCII
字串q接 CONCAT (expression + expression)
把ASCII转换为字W?CHR CHAR
q回字符串中的开始字W(左vQ?INSTR CHARINDEX
把字W{换ؓ写 LOWER LOWER
把字W{换ؓ大写 UPPER UPPER
填充字符串的左边 LPAD N/A
清除开始的I白 LTRIM LTRIM
清除N的空?RTRIM RTRIM
字符串中的v始模式(patternQ?INSTR PATINDEX
多次重复字符?RPAD REPLICATE
字符串的语音表示 SOUNDEX SOUNDEX
重复I格的字?RPAD SPACE
从数字数据{换ؓ字符数据 TO_CHAR STR
子串 SUBSTR SUBSTRING
替换字符 REPLACE STUFF
字串中的每个词首字母大?INITCAP N/A
译字符?TRANSLATE N/A
字符串长?LENGTH DATELENGTH or LEN
列表中最大的字符?GREATEST N/A
列表中最的字符?LEAST N/A
如果为NULL则{换字?NVL ISNULL
日期函数
函数 Oracle Microsoft SQL Server
日期相加 (date column +/- value) or
ADD_MONTHS DATEADD
两个日期的差 (date column +/- value) or
MONTHS_BETWEEN DATEDIFF
当前日期和时?SYSDATE GETDATE()
一个月的最后一?LAST_DAY N/A
时区转换 NEW_TIME N/A
日期后的W一个周?NEXT_DAY N/A
代表日期的字W串 TO_CHAR DATENAME
代表日期的整?TO_NUMBER
(TO_CHAR)) DATEPART
日期舍入 ROUND CONVERT
日期截断 TRUNC CONVERT
字符串{换ؓ日期 TO_DATE CONVERT
如果为NULL则{换日?NVL ISNULL
转换函数
函数 Oracle Microsoft SQL Server
数字转换为字W?TO_CHAR CONVERT
字符转换为数?TO_NUMBER CONVERT
日期转换为字W?TO_CHAR CONVERT
字符转换为日?TO_DATE CONVERT
16q制转换?q制 HEX_TO_RAW CONVERT
2q制转换?6q制 RAW_TO_HEX CONVERT
其它行别的函数
函数 Oracle Microsoft SQL Server
q回W一个非I辑ּ DECODE COALESCE
当前序列?CURRVAL N/A
下一个序列?NEXTVAL N/A
如果exp1 = exp2, q回null DECODE NULLIF
用户d账号ID数字 UID SUSER_ID
用户d?USER SUSER_NAME
用户数据库ID数字 UID USER_ID
用户数据库名 USER USER_NAME
当前用户 CURRENT_USER CURRENT_USER
用户环境(audit trail) USERENV N/A
在CONNECT BY子句中的U别 LEVEL N/A
合计函数
函数 Oracle Microsoft SQL Server
Average AVG AVG
Count COUNT COUNT
Maximum MAX MAX
Minimum MIN MIN
Standard deviation STDDEV STDEV or STDEVP
Summation SUM SUM
Variance VARIANCE VAR or VARP
Oracleq有一个有用的函数EXTRACT,提取q且q回日期旉或时间间隔表辑ּ中特定的旉?
EXTRACT(YEAR FROM 日期)
T_SQL命o大全
--????/p>
--数据操作
SELECT --从数据库表中索数据行和列
INSERT --向数据库表添加新数据?/p>
DELETE --从数据库表中删除数据?/p>
UPDATE --更新数据库表中的数据
--数据定义
CREATE TABLE --创徏一个数据库?/p>
DROP TABLE --从数据库中删除表
ALTER TABLE --修改数据库表l构
CREATE VIEW --创徏一个视?/p>
DROP VIEW --从数据库中删除视?/p>
CREATE INDEX --为数据库表创Z个烦?/p>
DROP INDEX --从数据库中删除烦?/p>
CREATE PROCEDURE --创徏一个存储过E?/p>
DROP PROCEDURE --从数据库中删除存储过E?/p>
CREATE TRIGGER --创徏一个触发器
DROP TRIGGER --从数据库中删除触发器
CREATE SCHEMA --向数据库d一个新模式
DROP SCHEMA --从数据库中删除一个模?/p>
CREATE DOMAIN --创徏一个数据值域
ALTER DOMAIN --改变域定?/p>
DROP DOMAIN --从数据库中删除一个域
--数据控制
GRANT --授予用户讉K权限
DENY --拒绝用户讉K
REVOKE --解除用户讉K权限
--事务控制
COMMIT --l束当前事务
ROLLBACK --中止当前事务
SET TRANSACTION --定义当前事务数据讉K特征
--E序化SQL
DECLARE --为查询设定游?/p>
EXPLAN --为查询描q数据访问计?/p>
OPEN --索查询结果打开一个游?/p>
FETCH --索一行查询结?/p>
CLOSE --关闭游标
PREPARE --为动态执行准备SQL 语句
EXECUTE --动态地执行SQL 语句
DESCRIBE --描述准备好的查询
---局部变?/p>
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---全局变量
---必须以@@开?/p>
--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --打印字符?x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
--CASE
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end
--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --打印变量x 的?/p>
while @y < 3
begin
select @c = 100*@x + @y
print @c --打印变量c 的?/p>
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--WAITFOR
--?{待1 时2 分零3 U后才执行SELECT 语句
waitfor delay ’01:02:03’
select * from employee
--?{到晚上11 炚w8 分后才执行SELECT 语句
waitfor time ’23:08:00’
select * from employee
***SELECT***
select *(列名) from table_name(表名) where column_name operator value
ex 宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的范围)
stockname like '[^F-M]%' --------- (^排除指定范围)
--------- 只能在用like关键字的where子句中用通配W?
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stocksex = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序Qdesc-降序Qasc-升序
order by 1,2 --------- by列号
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查?/p>
--------- 除非能确保内层select只返回一个行的|
--------- 否则应在外层where子句中用一个in限定W?/p>
select distinct column_name form table_name --------- distinct指定索独有的列|不重?/p>
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 表按行分组,指定列中有相同的?/p>
having count(*) = 2 --------- having选定指定的组
select *
from table1, table2
where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示
table1.id =* table2.id -------- 叛_部连?/p>
select stockname from table1
union [all] ----- union合ƈ查询l果集,all-保留重复?/p>
select stockname from table2
--STDEV()
--STDEV()函数q回表达式中所有数据的标准?/p>
--STDEVP()
--STDEVP()函数q回M标准?/p>
--VAR()
--VAR()函数q回表达式中所有值的l计变异?/p>
--VARP()
--VARP()函数q回M变异?/p>
----术函数----
/***三角函数***/
SIN(float_expression) --q回以弧度表C的角的正u
COS(float_expression) --q回以弧度表C的角的余u
TAN(float_expression) --q回以弧度表C的角的正切
COT(float_expression) --q回以弧度表C的角的余切
/***反三角函?**/
ASIN(float_expression) --q回正u是FLOAT 值的以弧度表C的?/p>
ACOS(float_expression) --q回余u是FLOAT 值的以弧度表C的?/p>
ATAN(float_expression) --q回正切是FLOAT 值的以弧度表C的?/p>
ATAN2(float_expression1,float_expression2)
--q回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度{换ؓ角度q回与表辑ּ相同的数据类型可?/p>
--INTEGER/MONEY/REAL/FLOAT cd
RADIANS(numeric_expression) --把角度{换ؓ弧度q回与表辑ּ相同的数据类型可?/p>
--INTEGER/MONEY/REAL/FLOAT cd
EXP(float_expression) --q回表达式的指数?/p>
LOG(float_expression) --q回表达式的自然Ҏ?/p>
LOG10(float_expression)--q回表达式的?0 为底的对数?/p>
SQRT(float_expression) --q回表达式的qx?/p>
/***取近似值函?**/
CEILING(numeric_expression) --q回>=表达式的最整数返回的数据cd与表辑ּ相同可ؓ
--INTEGER/MONEY/REAL/FLOAT cd
FLOOR(numeric_expression) --q回<=表达式的最整数返回的数据cd与表辑ּ相同可ؓ
--INTEGER/MONEY/REAL/FLOAT cd
ROUND(numeric_expression) --q回以integer_expression 为精度的四舍五入D回的数据
--cd与表辑ּ相同可ؓINTEGER/MONEY/REAL/FLOAT cd
ABS(numeric_expression) --q回表达式的l对D回的数据cd与表辑ּ相同可ؓ
--INTEGER/MONEY/REAL/FLOAT cd
SIGN(numeric_expression) --试参数的正负号q回0 零? 正数?1 负数q回的数据类?/p>
--与表辑ּ相同可ؓINTEGER/MONEY/REAL/FLOAT cd
PI() --q回gؓπ ?.1415926535897936
RAND([integer_expression]) --用Q选的[integer_expression]做种子值得?-1 间的随机点?/p>
----字符串函?---
ASCII() --函数q回字符表达式最左端字符的ASCII 码?/p>
CHAR() --函数用于ASCII 码{换ؓ字符
--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL ?/p>
LOWER() --函数把字W串全部转换为小?/p>
UPPER() --函数把字W串全部转换为大?/p>
STR() --函数把数值型数据转换为字W型数据
LTRIM() --函数把字W串头部的空格去?/p>
RTRIM() --函数把字W串N的空格去?/p>
LEFT(),RIGHT(),SUBSTRING() --函数q回部分字符?/p>
CHARINDEX(),PATINDEX() --函数q回字符串中某个指定的子串出现的开始位|?/p>
SOUNDEX() --函数q回一个四位字W码
--SOUNDEX函数可用来查扑֣音相似的字符串但SOUNDEX函数Ҏ字和汉字均只q回0 ?/p>
DIFFERENCE() --函数q回由SOUNDEX 函数q回的两个字W表辑ּ的值的差异
--0 两个SOUNDEX 函数q回值的W一个字W不?/p>
--1 两个SOUNDEX 函数q回值的W一个字W相?/p>
--2 两个SOUNDEX 函数q回值的W一二个字符相同
--3 两个SOUNDEX 函数q回值的W一二三个字W相?/p>
--4 两个SOUNDEX 函数q回值完全相?/p>
QUOTENAME() --函数q回被特定字W括h的字W串
/*select quotename('abc', '{') quotename('abc')
q行l果如下
----------------------------------{
{abc} [abc]*/
REPLICATE() --函数q回一个重复character_expression 指定ơ数的字W串
/*select replicate('abc', 3) replicate( 'abc', -2)
q行l果如下
----------- -----------
abcabcabc NULL*/
REVERSE() --函数指定的字符串的字符排列序颠?/p>
REPLACE() --函数q回被替换了指定子串的字W串
/*select replace('abc123g', '123', 'def')
q行l果如下
----------- -----------
abcdefg*/
SPACE() --函数q回一个有指定长度的空白字W串
STUFF() --函数用另一子串替换字符串指定位|长度的子串
----数据cd转换函数----
CAST() 函数语法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函数语法如下
CONVERT() (<data_ type>[ length ], <expression> [, style])
select cast(100+99 as char) convert(varchar(12), getdate())
q行l果如下
------------------------------ ------------
199 Jan 15 2000
----日期函数----
DAY() --函数q回date_expression 中的日期?/p>
MONTH() --函数q回date_expression 中的月䆾?/p>
YEAR() --函数q回date_expression 中的q䆾?/p>
DATEADD(<datepart> ,<number> ,<date> )
--函数q回指定日期date 加上指定的额外日期间隔number 产生的新日期
DATEDIFF(<datepart> ,<number> ,<date> )
--函数q回两个指定日期在datepart 斚w的不同之?/p>
DATENAME(<datepart> , <date> ) --函数以字W串的Ş式返回日期的指定部分
DATEPART(<datepart> , <date> ) --函数以整数值的形式q回日期的指定部?/p>
GETDATE() --函数以DATETIME 的缺省格式返回系l当前的日期和时?/p>
----pȝ函数----
APP_NAME() --函数q回当前执行的应用程序的名称
COALESCE() --函数q回众多表达式中W一个非NULL 表达式的?/p>
COL_LENGTH(<'table_name'>, <'column_name'> ) --函数q回表中指定字段的长度?/p>
COL_NAME(<table_id>, <column_id> ) --函数q回表中指定字段的名U即列名
DATALENGTH() --函数q回数据表达式的数据的实际长?/p>
DB_ID(['database_name']) --函数q回数据库的~号
DB_NAME(database_id) --函数q回数据库的名称
HOST_ID() --函数q回服务器端计算机的名称
HOST_NAME() --函数q回服务器端计算机的名称
IDENTITY(<data_type>[, seed increment]) [AS column_name]}
--IDENTITY() 函数只在SELECT INTO 语句中用用于插入一个identity column列到新表?/p>
/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() --函数判断所l定的表辑ּ是否为合理日?/p>
ISNULL(<check_expression>, <replacement_value> ) --函数表辑ּ中的NULL 值用指定值替?/p>
ISNUMERIC() --函数判断所l定的表辑ּ是否为合理的数?/p>
NEWID() --函数q回一个UNIQUEIDENTIFIER cd的数?/p>
NULLIF(<expression1>, <expression2> )
--NULLIF 函数在expression1 与expression2 相等时返回NULL D不相{时则返回expression1 的?/p>
?:旉转换函数 |
javascript的注释:
//q是单行注释
/*q是多行注释
*
*/
javascript的常量通常又称字面帔R,它是不能改变的数?与基本的数据cd相对?
有以下几U常?br />
<1>整型帔R
可以使用十六q制,八进制和十进?十六q制以OX或OX开?八进制以0开?十进制第一位不能是0.
<2>实型帔R
有整数部分和数部分.
<3>布尔?br />
有两U?true和false
<4>字符串型帔R
javascript中没有单独的字符帔R,而只有表C由若干字符所l成的字W串型常??'?"引v?
字符串中的特D字W要用反斜杠(\)后跟一个普通字W来表示.通过"+"把两个字W串qv?
<5>null帔R
表示一个变量所指向的对象ؓI?"I?是一个有Ҏ意义的倹{?br />
<6>undefined帔R
undefined帔R用于表示变量q没有被赋值的状态或对象的某个属性不存在。变量的D处于未知状态?/p>
在变量是null,undefined Ӟ在布环境中都ؓfalse.
不管何时Q只要对象非I,在布环境中都ؓtrue.
参数个数可变的函敎ͼ在取传给函数的参数时Q可能通过循环arguments取出传的倹{?br />
创徏动态函敎ͼ
<script language="javascript">
var suqare = new Function("x","y","var sum;sum=x*x+y*y;return sum;");
alert(square(3,2));
</script>
pȝ函数:
encodeURI Ҏq回一个编码的 URI。如果您编码结果传递给 decodeURIQ那么将q回初始的字W串?/p>
encodeURI Ҏ不会对下列字W进行编码:":"?/"?;" ?"?"。请使用 encodeURIComponent Ҏ?/p>
q些字符q行~码?br />
decodeURIҎ一个已~码的URI字符串解?
escape Ҏq回一个包含了 charstring 内容的字W串| Unicode 格式Q。所有空根{标炏V重音符
号以及其他非 ASCII 字符都用 %xx ~码代替Q其?xx {于表示该字W的十六q制数。例如,I格q回
的是 "%20" ?br />
unescape与上相反.
evalҎ某个参数字W串作ؓ一个javascript表达式执?
对象与对象实?
通过function创徏对象:
function Person(){
}
通过new 实例化一个对?
var person1 = new Person();
通过对象?变量?XXX;为对象增加属性或Ҏ.
person1.age = 19;
person1.say = sayFunc();
通过?对象实例名[属性名字符串]"的格式来讉K某个对象实例的属?例如person1.name可以写成
person1["name"]来引?
this关键字一般只在用作对象成员方法的函数中出?它代表某个成员方法执行时,引用该方法的当前对象
实例.在对象的构造方法?this.成员?的Ş?可以对象的每个对象实例都增加新的成员.
<script>
function Person(name,age)
{
this.age = age;
this.name = name;
this.say = sayFunc;
}
function sayFunc()
{
alert(this.name + ":" + this.age);
}
var person1 = new Person("zhangsan",18);
person1.say();
var person2 = new Person("lisi",20);
person2.say();
</script>
内部对象:
javascript中内部对?按用方式可分ؓ两种情况:一U是动态对?在引用它的属性和Ҏ?必须使用
new关键字创Z个对象实?然后使用"对象实例?成员"的格式来讉K其属性和Ҏ.另一U是静态的?/p>
?在引用对象的属性和Ҏ时不需要用new关键字创建对象实?直接使用"对象?成员"的格式来讉K
其属性和Ҏ.
Object对象
对象的属性也可以使用索引q算W?[]"讉K.
String对象
Math对象
Date对象
专门用于对象的语?
with(对象名称)
{
执行语句?br />
}
如果一D连l的E序代码?多次使用C某个对象的许多属性或Ҏ,那么,只要在with关键字后的小?/p>
号中定出q个对象的名U?然后可以在随后的大括号中的执行语句里直接引用该对象的属性名或方法名,
不必再在每个属性和Ҏ名前都加上对象实例名和点(.)?
for(变量in对象
{
执行语句
}
该语句的功能是用于对某个对象的所有属性进行@操作,它将一个对象的所有属性名U逐一赋给一个变?
Ҏ不需要事先知道对象属性的个数.
数组:
是用一个变量来表示一l数据的集合,实现对这l数据的l一理,数组中的每一个数据也叫数l的一?/p>
元素.
var arr=["zs",124,"li",3.5];
数组列表的每个元素既可以是有效的javascript表达?也可以ؓI?两个相连的逗号).如果数组中的某个
元素为空,该元素的gؓundefined.
var arr = [1,,,,5];
如果数组元素本n又是数组,q就叫数l的数组.
var arr=[["Names","Beansprout","Pumpkin"],["Ages",5,3,2]];
可以使用"数组变量名[子数l烦引号][子数l中的元素烦引号]"的格式来讉K数组的数l中的元?
Array对象:
javascript中也提供了一个叫Array的内部对象来创徏数组,通过调用Array对象的各U方?可以方便地对
数组q行排序,删除,合ƈ{操?
DOM~程:
E序中创建的对象用来描述现实世界中有形或无Ş的事?javascript也将览器本w?|页文以及|页
文中的HTML元素{都用相应的内置对象来表C?其中的一些对象是作ؓ另外的一些对象的属性而存在的,
q些对象及对象之间的层次关系l称为DOM.
如何~写事g处理E序:
1.在事件源对象所对应的HTML标签上增加一个要处理的事件属?让事件属性值等于处理该事g的函数名
或程序代?
<html>
<head>
<script language="javascript">
<!--
function hideContextmenu(){
return false;
}
//-->
</script>
</head>
<body oncontextmenu="return hideContextmenu()">
</body>
</html>
2.直接在javascript代码?讄元素对象的事件属?让事件属性等于处理该事g的函数名或程序代?
<script language="javascript">
<!--
document.oncontextmenu=hideContextmenu;
function hideContextmenu(){
return false;
}
//-->
</script>
3.在一个专门的<script>标签对中~写某个元素对象的某U事件处理程序代?q用for属性指定事件源?/p>
用event属性指定事件名,q种<script>标签中的脚本E序只在指定的事件源的指定事件发生时才被调用?/p>
?
<script language="javascript" for="document" event="oncontextmenu">
window.event.returnValue = false;
</script>
window对象
window对象的属?
location对象:
event对象:
frames数组对象:
screen对象:
clipboardDate对象:
history对象:
navigator对象:
document对象:
document对象代表览器窗口中装蝲的整个HTML文,文档中的每个HTML元素都可以用一个javascript?/p>
象来与之对应,代表HTML元素的对象在javascript中都是作为document对象的直接或间接属性被引用?
body对象的对象属?
form对象:
注意:itemҎ,q回代表Form表单中的某个表单字段元素所对应的对?接受的参数可以是表单字段元素
的名U?也可以是表单字段元素在Form表单中的索引序号.itemҎ不能q回<input type="image....>c?/p>
型的表单字段元素.
客户端的h信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequestcȝ实例?/p>
序号 ????
1 object getAttribute(String name) q回指定属性的属性?
2 Enumeration getAttributeNames() q回所有可用属性名的枚?
3 String getCharacterEncoding() q回字符~码方式
4 int getContentLength() q回h体的长度Q以字节敎ͼ
5 String getContentType() 得到h体的MIMEcd
6 ServletInputStream getInputStream() 得到h体中一行的二进制流
7 String getParameter(String name) q回name指定参数的参数?
8 Enumeration getParameterNames() q回可用参数名的枚D
9 String[] getParameterValues(String name) q回包含参数name的所有值的数组
10 String getProtocol() q回h用的协议cd及版本号
11 String getScheme() q回h用的计划??http.https及ftp{?
12 String getServerName() q回接受h的服务器L?
13 int getServerPort() q回服务器接受此h所用的端口?
14 BufferedReader getReader() q回解码q了的请求体
15 String getRemoteAddr() q回发送此h的客LIP地址
16 String getRemoteHost() q回发送此h的客LL?
17 void setAttribute(String key,Object obj) 讄属性的属性?
18 String getRealPath(String path) q回一虚拟路径的真实\?
19
20
2.response对象
response对象包含了响应客戯求的有关信息Q但在JSP中很直接用到它。它是HttpServletResponsecȝ实例?/p>
序号 ????
1 String getCharacterEncoding() q回响应用的是何U字W编?
2 ServletOutputStream getOutputStream() q回响应的一个二q制输出?
3 PrintWriter getWriter() q回可以向客L输出字符的一个对?
4 void setContentLength(int len) 讄响应头长?
5 void setContentType(String type) 讄响应的MIMEcd
6 sendRedirect(java.lang.String location) 重新定向客户端的h
7
8
3.session对象
session对象指的是客L与服务器的一ơ会话,从客戯到服务器的一个WebApplication开始,直到客户端与服务器断开q接为止。它是HttpSessioncȝ实例.
序号 ????
1 long getCreationTime() q回SESSION创徏旉
2 public String getId() q回SESSION创徏时JSP引擎为它讄惟一ID?
3 long getLastAccessedTime() q回此SESSION里客L最q一ơ请求时?
4 int getMaxInactiveInterval() q回两次h间隔多长旉此SESSION被取?ms)
5 String[] getValueNames() q回一个包含此SESSION中所有可用属性的数组
6 void invalidate() 取消SESSIONQSESSION不可?
7 boolean isNew() q回服务器创建的一个SESSION,客户端是否已l加?
8 void removeValue(String name) 删除SESSION中指定的属?
9 void setMaxInactiveInterval() 讄两次h间隔多长旉此SESSION被取?ms)
10
11
12
13
14
15
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*" %>
<html>
<head><title>session对象_?</title><head>
<body><br>
session的创建时?<%=session.getCreationTime()%> <%=new Date(session.getCreationTime())%><br><br>
session的Id?<%=session.getId()%><br><br>
客户端最q一ơ请求时?<%=session.getLastAccessedTime()%> <%=new java.sql. Time(session.getLastAccessedTime())%><br><br>
两次h间隔多长旉此SESSION被取?ms):<%=session.getMaxInactiveInterval()%><br><br>
是否是新创徏的一个SESSION:<%=session.isNew()?"?:"?%><br><br>
<%
session.putValue("name","霖苑~程");
session.putValue("nmber","147369");
%>
<%
for(int i=0;i<session.getValueNames().length;i++)
out.println(session.getValueNames()[i]+"="+session.getValue(session.getValueNames()[i]));
%>
<!--q回的是从格林威L?GMT)1970q?1?1?Q?0Q?0起到计算当时的毫U数-->
</body>
</html>
4.out对象
out对象是JspWritercȝ实例,是向客户端输出内容常用的对象
序号 ????
1 void clear() 清除~冲区的内容
2 void clearBuffer() 清除~冲区的当前内容
3 void flush() 清空?
4 int getBufferSize() q回~冲Z字节数的大小Q如不设~冲区则?
5 int getRemaining() q回~冲剩余多少可用
6 boolean isAutoFlush() q回~冲区满Ӟ是自动清I是抛出异?
7 void close() 关闭输出?
8
9
10
11
12
13
14
15
<%@page contentType="text/html;charset=gb2312"%>
<html><head><title>out对象_?:~存试</title></head>
<%@page buffer="1kb"%>
<body>
<%
for(int i=0;i<2000;i++)
out.println(i+"{"+out.getRemaining()+"}");
%><br>
~存大小Q?lt;%=out.getBufferSize()%><br>
剩余~存大小Q?lt;%=out.getRemaining()%><br>
自动hQ?lt;%=out.isAutoFlush()%><br>
<%--out.clearBuffer();--%>
<%--out.clear();--%>
<!--~省情况?服务端要输出到客L的内?不直接写到客L,而是先写C个输出缓冲区?只有在下面三中情况下Q才会把该缓冲区的内容输出到客户端上Q?
1.该JSP|页已完成信息的输出
2.输出~冲区已?
3.JSP中调用了out.flush()或response.flushbuffer()
-->
</body>
</html>
5.page对象
page对象是指向当前JSP面本nQ有点象cM的this指针Q它是java.lang.Objectcȝ实例
序号 ????
1 class getClass q回此Object的类
2 int hashCode() q回此Object的hash?
3 boolean equals(Object obj) 判断此Object是否与指定的Object对象相等
4 void copy(Object obj) 把此Object拯到指定的Object对象?
5 Object clone() 克隆此Object对象
6 String toString() 把此Object对象转换成Stringcȝ对象
7 void notify() 唤醒一个等待的U程
8 void notifyAll() 唤醒所有等待的U程
9 void wait(int timeout) 使一个线E处于等待直到timeoutl束或被唤醒
10 void wait() 使一个线E处于等待直到被唤醒
11 void enterMonitor() 对Object加锁
12 void exitMonitor() 对Object开?
13
14
15
6.application对象
application对象实现了用户间数据的共享,可存攑օ局变量。它开始于服务器的启动Q直到服务器的关闭,在此期间Q此对象一直存在;q样在用L前后q接或不同用户之间的q接中,可以Ҏ对象的同一属性进行操作;在Q何地方对此对象属性的操作Q都媄响到其他用户Ҏ的访问。服务器的启动和关闭军_了application对象的生命。它是ServletContextcȝ实例?/p>
序号 ????
1 Object getAttribute(String name) q回l定名的属性?
2 Enumeration getAttributeNames() q回所有可用属性名的枚?
3 void setAttribute(String name,Object obj) 讑֮属性的属性?
4 void removeAttribute(String name) 删除一属性及其属性?
5 String getServerInfo() q回JSP(SERVLET)引擎名及版本?
6 String getRealPath(String path) q回一虚拟路径的真实\?
7 ServletContext getContext(String uripath) q回指定WebApplication的application对象
8 int getMajorVersion() q回服务器支持的Servlet API的最大版本号
9 int getMinorVersion() q回服务器支持的Servlet API的最大版本号
10 String getMimeType(String file) q回指定文g的MIMEcd
11 URL getResource(String path) q回指定资源(文g及目?的URL路径
12 InputStream getResourceAsStream(String path) q回指定资源的输入流
13 RequestDispatcher getRequestDispatcher(String uripath) q回指定资源的RequestDispatcher对象
14 Servlet getServlet(String name) q回指定名的Servlet
15 Enumeration getServlets() q回所有Servlet的枚?
16 Enumeration getServletNames() q回所有Servlet名的枚D
17 void log(String msg) 把指定消息写入Servlet的日志文?
18 void log(Exception exception,String msg) 把指定异常的栈轨q及错误消息写入Servlet的日志文?
19 void log(String msg,Throwable throwable) 把栈轨迹及给出的Throwable异常的说明信息写入Servlet的日志文?
20
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head><title>APPLICATION对象_?</title><head>
<body><br>
JSP(SERVLET)引擎名及版本?<%=application.getServerInfo()%><br><br>
q回/application1.jsp虚拟路径的真实\?<%=application.getRealPath("/application1.jsp")%><br><br>
服务器支持的Servlet API的大版本?<%=application.getMajorVersion()%><br><br>
服务器支持的Servlet API的小版本?<%=application.getMinorVersion()%><br><br>
指定资源(文g及目?的URL路径:<%=application.getResource("/application1.jsp")%><br><br><!--可以application1.jsp换成一个目?->
<br><br>
<%
application.setAttribute("name","霖苑计算机编E技术培训学?);
out.println(application.getAttribute("name"));
application.removeAttribute("name");
out.println(application.getAttribute("name"));
%>
</body>
</html>
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head><title>APPLICATION对象_?</title><head>
<body><br>
<!--׃application一直存在于服务器端Q可以利用此Ҏ对|页记数-->
<%
if(application.getAttribute("count")==null)
application.setAttribute("count","1");
else
application.setAttribute("count",Integer.toString(Integer.valueOf(application.getAttribute("count").toString()).intValue()+1));
%>
你是W?lt;%=application.getAttribute("count")%>位访问?br />
</body>
<!--׃getAttribute()Ҏ得到的是一个Objectcd对象,用getString()Ҏ转化为Stringcd-->
<!--用IntegercȝvalueOf()Ҏ把得到的String转化成Integer的对?在用intValue()Ҏ得到int?再加1,最后把计算的结果用Integer.toString()Ҏ转化成setAttribute()Ҏ所要求的Stringcd-->
</html>
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head><title>APPLICATION对象_?</title><head>
<body><br>
<!--׃application一直存在于服务器端Q可以利用此Ҏ对|页记数-->
<%
String str=application.getAttribute("count").toString();//getAttribute("count")q回的是Objectcd
int i=0;
if(str==null)
application.setAttribute("count","1");
else
i=Integer.parseInt(str); //out.println(i);
application.setAttribute("count",++i+"");
%>
你是W?lt;%=application.getAttribute("count")%>位访问?br />
</body>
</html>
7.exception对象
exception对象是一个例外对象,当一个页面在q行q程中发生了例外Q就产生q个对象。如果一个JSP面要应用此对象Q就必须把isErrorPage设ؓtrueQ否则无法编译。他实际上是java.lang.Throwable的对?/p>
序号 ????
1 String getMessage() q回描述异常的消?
2 String toString() q回关于异常的简短描q消?
3 void printStackTrace() 昄异常及其栈轨q?
4 Throwable FillInStackTrace() 重写异常的执行栈轨迹
5
8.pageContext对象
pageContext对象提供了对JSP面内所有的对象及名字空间的讉KQ也是说他可以讉K到本|在的SESSIONQ也可以取本面所在的application的某一属性|他相当于面中所有功能的集大成者,它的本类名也叫pageContext?/p>
序号 ????
1 JspWriter getOut() q回当前客户端响应被使用的JspWriter?out)
2 HttpSession getSession() q回当前中的HttpSession对象(session)
3 Object getPage() q回当前늚Object对象(page)
4 ServletRequest getRequest() q回当前늚ServletRequest对象(request)
5 ServletResponse getResponse() q回当前늚ServletResponse对象(response)
6 Exception getException() q回当前늚Exception对象(exception)
7 ServletConfig getServletConfig() q回当前늚ServletConfig对象(config)
8 ServletContext getServletContext() q回当前늚ServletContext对象(application)
9 void setAttribute(String name,Object attribute) 讄属性及属性?
10 void setAttribute(String name,Object obj,int scope) 在指定范围内讄属性及属性?
11 public Object getAttribute(String name) 取属性的?
12 Object getAttribute(String name,int scope) 在指定范围内取属性的?
13 public Object findAttribute(String name) L一属?q回起属性值或NULL
14 void removeAttribute(String name) 删除某属?
15 void removeAttribute(String name,int scope) 在指定范围删除某属?
16 int getAttributeScope(String name) q回某属性的作用范围
17 Enumeration getAttributeNamesInScope(int scope) q回指定范围内可用的属性名枚D
18 void release() 释放pageContext所占用的资?
19 void forward(String relativeUrlPath) 使当前页面重导到另一面
20 void include(String relativeUrlPath) 在当前位|包含另一文g
21
<%@page contentType="text/html;charset=gb2312"%>
<html><head><title>pageContext对象_?</title></head>
<body><br>
<%
request.setAttribute("name","霖苑~程");
session.setAttribute("name","霖苑计算机编E技术培?);
//session.putValue("name","计算机编E?);
application.setAttribute("name","培训");
%>
request讑֮的|<%=pageContext.getRequest().getAttribute("name")%><br>
session讑֮的|<%=pageContext.getSession().getAttribute("name")%><br>
application讑֮的|<%=pageContext.getServletContext().getAttribute("name")%><br>
范围1内的|<%=pageContext.getAttribute("name",1)%><br>
范围2内的|<%=pageContext.getAttribute("name",2)%><br>
范围3内的|<%=pageContext.getAttribute("name",3)%><br>
范围4内的|<%=pageContext.getAttribute("name",4)%><br>
<!--从最的范围page开始,然后是reques、session以及application-->
<%pageContext.removeAttribute("name",3);%>
pageContext修改后的session讑֮的|<%=session.getValue("name")%><br>
<%pageContext.setAttribute("name","应用技术培?,4);%>
pageContext修改后的application讑֮的|<%=pageContext.getServletContext().getAttribute("name")%><br>
值的查找Q?lt;%=pageContext.findAttribute("name")%><br>
属性name的范_<%=pageContext.getAttributesScope("name")%><br>
</body></html>
9.config对象
config对象是在一个Servlet初始化时QJSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数Q通过属性名和属性值构成)以及服务器的有关信息Q通过传递一个ServletContext对象Q?/p>
序号 ????
1 ServletContext getServletContext() q回含有服务器相关信息的ServletContext对象
2 String getInitParameter(String name) q回初始化参数的?
3 Enumeration getInitParameterNames() q回Servlet初始化所需所有参数的枚D
4
5
内置对象Q又叫隐含对象,?个内|对象):不需要预先声明就可以在脚本代码和表达式中随意使用
1-out:
javax.servlet.jsp.JspWritercdQ代表输出流的对象。作用域为pageQ页面执行期Q?/p>
requestQjavax.servlet.ServletRequest的子cdQ此对象装了由WEB览器或其它客户端生成地HTTP
h的细节(参数Q属性,头标和数据)。作用域为request(用户h期)?br /> Ҏ由可查看API
responseQjavax.servlet.ServletResponse的子cdQ此对象装了返回到HTTP客户端的输出Q向面
作者提供设|响应头标和状态码的方式。经常用来设|HTTP标题Q添加cookieQ设|响应内容的cd和状
态,发送HTTP重定向和~码URL。作用域为pageQ页面执行期Q?/p>
pageContextQjavax.servlet.jsp.PageContextQ抽象类Q类型,作用域ؓpageQ页面执行期Q。此对象
提供所有四个作用域层次的属性查询和修改能力Q它也提供了转发h到其它资源和包含其他资源的方?/p>
Q?br /> 该对象的Ҏ都是抽象Ҏ
sessionQjavax.servlet.http.HttpSessioncdQ主要用于跟t对话。作用域session(会话期—)?/p>
HttpSession是一个类似哈希表的与单一WEB览器会话相关的对象Q它存在于HTTPh之间Q可以存储Q
何类型的命名对象?br />
如果不需要在h之间跟踪会话对象Q可以通过在page指o中指定session="false"
需要记住的是pageContext对象也可以与session.getAttribute(),session.setAttribute()一L方式?/p>
得ƈ讄会话属性?/p>
applicationQjavax.servlet.ServletContextcdQservlet的环境通过调用getServletConfig
().getContext()Ҏ获得。作用域是application(整个E序q行期)。它提供了关于服务器版本Q应?/p>
U初始化参数和应用内资源l对路径Q注册信息的方式
configQjavax.servlet.ServletConfig,作用域ؓpageQ页面执行期Q?/p>
exception:java.lang.Throwable,通过JSP错误面中一个catch块已l益Z没有捕获?/p>
java.lang.Throwable的Q意实例,传向了errorPage的URI。作用域为pageQ页面执行期Q。注?/p>
exception只有在page指o中具有属性isErrorPage="true"时才有效?/p>
page:java.lang.ObjectcdQ指向页面自w的方式。作用域为pageQ页面执行期
JSP中九大内|对象ؓQ?
request h对象 cd javax.servlet.ServletRequest 作用?Request
response 响应对象 cd javax.servlet.SrvletResponse 作用?nbsp; Page
pageContext 面上下文对?nbsp; cd javax.servlet.jsp.PageContext 作用?nbsp; Page
session 会话对象 cd javax.servlet.http.HttpSession 作用?nbsp; Session
application 应用E序对象 cd javax.servlet.ServletContext 作用?nbsp; Application
out 输出对象 cd javax.servlet.jsp.JspWriter 作用?nbsp; Page
config 配置对象 cd javax.servlet.ServletConfig 作用?nbsp; Page
page 面对象 cd javax.lang.Object 作用?nbsp; Page
exception 例外对象 cd javax.lang.Throwable 作用?nbsp; page
request 对象代表的是来自客户端的hQ例如我们在FORM表单中填写的信息{,是最常用的对?/p>
常用的方法有QgetParameter、getParameterNames 和getParameterValues 通过调用q几个方法来获取h对象中所包含的参数的倹{?/p>
response 对象代表的是对客L的响应,也就是说可以通过response 对象来组l发送到客户端的数据。但是由于组l方式比较底层,所以不普通读者用,需要向客户端发送文字时直接使用
pageContext 对象直译时可以称?#8220;面上下?#8221;对象Q代表的是当前页面运行的一些属?/p>
常用的方法有 QfindAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope
一般情况下pageContext对象用到得也不是很多Q只有在目所面的情冉|较复杂的情况下,才会利用到页面属性来辅助处理?/p>
session 对象代表服务器与客户端所建立的会话,当需要在不同的JSP面中保留客户信息的情况下用,比如在线购物、客戯q跟t等?#8220;session” 对象建立在cookie的基上,所以用时应注意判断一下客L是否打开了cookie。常用的Ҏ包括getId?getValue?getValueNames和putValue{?
概要
HTTP是无状态(statelessQ协议;
Web Server Ҏ一个客Lh都没有历史记忆;
Session用来保存客户端状态信息;
由Web Server 写入Q?br />
存于客户端;
客户端的每次讉K都把上次的session记录传递给Web ServerQ?br />
Web Serverd客户端提交的session来获取客L的状态信?/p>
application 对象负责提供应用E序在服务器中运行时的一些全局信息Q常用的Ҏ有getMimeType和getRealPath{?/p>
out 对象代表了向客户端发送数据的对象Q与“response” 对象不同Q通过“out” 对象发送的内容是览器需要显C的内容Q是文本一U的Q可以通过“out” 对象直接向客L写一个由E序动态生成HTML文g。常用的Ҏ除了pirnt和println之外Q还包括clear、clearBuffer、flush、getBufferSize和getRemainingQ这是因?#8220;out” 对象内部包含了一个缓冲区Q所以需要一些对~冲行操作的Ҏ
“config” 对象提供一些配|信息,常用的方法有getInitParameter和getInitParameterNamesQ以获得Servlet初始化时的参数?/p>
“page” 对象代表了正在运行的由JSP文g产生的类对象Q不一般读者用?/p>
“exception” 对象则代表了JSP文gq行时所产生的例外对象,此对象不能在一般JSP文g中直接用,而只能在使用?#8220;<%@ page isErrorPage="true "%>”的JSP文g中?
四个作用域:
何ؓ作用?
先让我们看看效果Q?/p>
大概程是这LQ我们访?4-01/index.jsp的时候,分别对pageContext, request, session,
application四个作用域中的变量进行篏加。(当然先判断这个变量是不是存在Q如果变量不存在Q则?/p>
把变量初始化?。)计算完成后就从index.jsp执行forward跌{到test.jsp。在test.jsp里再q行一?/p>
累加Q然后显C出q四个整数来?/p>
从显C的l果来看Q我们可以直观的得出l论Q?/p>
page里的变量没法从index.jsp传递到test.jsp。只要页面蟩转了Q它们就不见了?/p>
request里的变量可以跨越forward前后的两c但是只要刷新页面,它们重新计了?/p>
session和application里的变量一直在累加Q开始还看不出区别,只要关闭览器,再次重启览器访?/p>
q页Qsession里的变量重新计了?/p>
application里的变量一直在累加Q除非你重启tomcatQ否则它会一直变大?/p>
而作用域规定的是变量的有效期限?/p>
如果把变量放到pageContext里,p明它的作用域是pageQ它的有效范围只在当前jsp面里?/p>
从把变量攑ֈpageContext开始,到jsp面l束Q你都可以用这个变量?/p>
如果把变量放到request里,p明它的作用域是requestQ它的有效范围是当前h周期?/p>
所谓请求周期,是指从httph发vQ到服务器处理结束,q回响应的整个过E。在q个q程中可能
用forward的方式蟩转了多个jsp面Q在q些面里你都可以用这个变量?/p>
如果把变量放到session里,p明它的作用域是sessionQ它的有效范围是当前会话?/p>
所谓当前会话,是指从用户打开览器开始,到用户关闭浏览器q中间的q程。这个过E可能包含多?/p>
h响应。也是_只要用户不关览器,服务器就有办法知道这些请求是一个h发v的,整个q程?/p>
UCؓ一个会话(sessionQ,而放C话中的变量,可以在当前会话的所有请求里使用?/p>
如果把变量放到application里,p明它的作用域是applicationQ它的有效范围是整个应用?/p>
整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动Q到服务器关?#8221;Q是因ؓ一个服?/p>
器可能部|多个应用,当然你关闭了服务器,׃把上面所有的应用都关闭了?/p>
application作用域里的变量,它们的存zL间是最长的Q如果不q行手工删除Q它们就一直可以用?/p>
与上qC个不同的是,application里的变量可以被所有用户共用。如果用L的操作修改了application
中的变量Q用户乙讉K时得到的是修改后的倹{这在其他scope中都是不会发生的Qpage, request,
session都是完全隔离的,无论如何修改都不会媄响其他h的数据?/p>
我们使用public Object getAttribute(String name)获得变量|使用public void setAttribute
(String name, Object value)变量g存到对应作用域中。D个pageContext的例子就是:
// page
Integer countPage = (Integer) pageContext.getAttribute("countPage");
if (countPage == null) {
pageContext.setAttribute("countPage", 1);
} else {
pageContext.setAttribute("countPage", countPage + 1);
}
q里先从pageContext中取出名为countPage的整敎ͼ因ؓq回的都是java.lang.ObjectcdQ所以需要强
制{换成我们需要的整Ş。这里取得的变量如果不存在就会返回nullQ通过判断countPage == null来L
别变量是否存在,如果不存在就讄?Q如果存在就q行累加Q最后用setAttribute()Ҏ修改后
的变量值放入pageContext?/p>
其中的pageContext换成request, session, application可以操作其他三个作用域中的变量?br />