oracle xsql 详解(一)

本文假设你已经知道什么是xsql.
1.hello xsql
1) 准备工作

创建数据库用户并分配权限,这里就不详细说了。我已经有一个本地数据库的用户huchen.

在用户下创建表

--  Create table
create   table  XSQL_EMPLOYEE
(
  ID        
NUMBER ,
  LASTNAME  
VARCHAR2 ( 15 ),
  FIRSTNAME 
VARCHAR2 ( 15 ),
  JOB       
VARCHAR2 ( 30 )
)
tablespace USERS
  pctfree 
10
  initrans 
1
  maxtrans 
255
  storage
  (
    initial 64K
    minextents 
1
    maxextents unlimited
  );

 

插入数据:

insert   into  xsql_employee (ID, LASTNAME, FIRSTNAME, JOB)
values  ( 1 ' chen ' ' hu ' ' coder ' );
insert   into  xsql_employee (ID, LASTNAME, FIRSTNAME, JOB)
values  ( 2 ' lijun ' ' zhang ' ' Director  ' );

设置数据库连接

XSQLConfig.xml文件中找到connection节点,并根据你的数据库设置如下:

< connection  name ="xsql_test" >
          
< username > huchen </ username >
          
< password > huchen </ password >
          
< dburl > jdbc:oracle:thin:@localhost:1521:hcdb </ dburl >
          
< driver > oracle.jdbc.driver.OracleDriver </ driver >
          
< autocommit > false </ autocommit >
</ connection >

2)第一个xsql page

创建一个java web项目,在src目录下添加XSQLconfig.xml

WebRoot目录下增加一个文件夹xsql,并在xsql文件夹下添加文件test1.xsql,在该文件下添加代码:

<? xml version="1.0" ?>
<? xml-stylesheet type=text/xsl" href="helloworld.xsl" ?>
< page  connection ="xsql_test"  xmlns:xsql ="urn:oracle-xsql" >
< xsql:query >
select * from xsql_employee
</ xsql:query >
</ page >

访问http://localhost:8088/xsql_test/xsql/test1.xsql

将看到如下页面:


如果你的查询没匹配任何行,你又想在这种情况下执行另一个查询,你可以用

xsql:no-rows-query标签,他必须使用在xsql:query标签之下。如:

<? xml version="1.0" ?>
<? xml-stylesheet type=text/xsl" href="helloworld.xsl" ?>
< page  connection ="xsql_test"  xmlns:xsql ="urn:oracle-xsql" >
< xsql:query >
select * from xsql_employee where id = 1111
< xsql:no-rows-query >
select * from xsql_employee
</ xsql:no-rows-query >
</ xsql:query >
</ page >

2.writing xsql pages

1)查询数据库

xsql:query 标签是用来从数据库检索信息的。在前面的例子中,我们都简单的把一个sql放在该标签中,这个标签中只能放select 语句,如果你放一个insert语句在该标签中,那么xsql page processor将拒绝它。

在上面的例子中,查询语句查出的结果被转变成xml标签替代了xsql:query标签,表中的列名在每一行中替换成了xml元素的标签名字。如果你不喜欢列名,你可以用”select id as employee_id 来替代。 

特别是当你的输出列名中有特殊字符的时候,如:

select id, to_char(hiredate, ‘YYYY-MON’) from xsql_employee

如果你这么写,你将得到一个错误,第二列包含了”(“,这是xml标签名不能允许的,所以你需要给他一个别名,如:

select id, to_char(hiredate, ‘YYYY-MON’) as hiredate from xsql_employee

你同样可以设置程序自己生成的rowset row标签,使用xsql:queryrow-element rowset-element 属性来设置。如:

<? xml version="1.0" ?>
< xsql:query  connection ="xsql_test"  xmlns:xsql ="urn:oracle-xsql"  row-element ="EMPLOYEES"  rowset-element ="EMPLOYEE_LIST" >
select * from xsql_employee
</ xsql:query >

 

运行结果如下:


如果你需要在同一个page里使用多个xsql:query,则他们需要包含在一个跟节点下。因为一个xml文档必须要有一个根节点。

如:

<? xml version="1.0" ?>
<? xml-stylesheet type=text/xsl" href="helloworld.xsl" ?>
< page  connection ="xsql_test"  xmlns:xsql ="urn:oracle-xsql" >
< xsql:query >
select * from xsql_employee
</ xsql:query >
< xsql:query >
select * from xsql_employee
</ xsql:query >
</ page >

3.xsql parameters

xsql分为4种参数:

a.request parameters

b.page-private parameters

c.stylesheet parameters

d.session parameters

e.cookies

后面将说明各种类型的参数的用处。但是在此之前,我们的第一步是知道怎样去关联参数和参数值怎么在xml中呈现的。

1)关联参数

xsql page processor 通过寻找{@paramName}来解析xsql 页的参数,当他找到这种形式的参数时,它将用参数的值来替换{@paramName}

下面来看一个例子:

<? xml version="1.0" ?>
< page  xmlns:xsql ="urn:oracle-xsql"  connection ="{@conn}" >
< xsql:query >
    select {@fields} from {@tables}
</ xsql:query >
</ page >

如果你键入url不带参数,你将会的到报错信息。

键入以下url,将返回表中所有行

http://localhost:8088/xsql_test/xsql/very-unsecure.xsql?conn=xsql_test&fields=*&tables=xsql_employee


参数必须放在xsql:动作标签内,不然xsql解析器不会去替换参数的。

如果你把刚才xsql文档改为如下:

<? xml version="1.0" ?>
< page  xmlns:xsql ="urn:oracle-xsql"  connection ="{@conn}" >
< xsql:query >
    select {@fields} from {@tables}
</ xsql:query >
< conn > {@conn} </ conn >
< fields > {@fields} </ fields >
< tables > {@tables} </ tables >
</ page >


2)显示参数

在前面的例子中,我们知道了如何关联参数,但是如果你想要参数包括在输出中,需要使用<xsql:include-param> 或者<xsql:include-request-params>

例:

<? xml version="1.0" ?>
< page  xmlns:xsql ="urn:oracle-xsql"  connection ="{@conn}" >
< xsql:include-param  name ="conn"   />
< xsql:include-param  name ="fields"   />
< xsql:include-param  name ="tables"   />
</ page >

这个操作将输出所有的参数到xml中。


在这种情况下,你必须为每一个显示的参数写代码,如果你想显示所有的参数,你可以用<xsql:include-request-params>标签

如:

<? xml version="1.0" ?>
< page  xmlns:xsql ="urn:oracle-xsql"  connection ="{@conn}" >
< xsql:include-request-params />
</ page >

3)参数类型

a)request parameters

在上面的例子中,我们用到的就是请求参数。这很好理解,请求参数是是http请求的一部分。刚才的例子中我们用到的是http get 方法获得的requestpost方法也可以获得参数。例:

<! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
< html >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=UTF-8" >
< title > post param form </ title >
</ head >
< body >
< form  action ="xsql/very-unsecure.xsql"  method ="post" >
< table  border ="0" >
< tr >
< td > connection: </ td >
< td >< input  type ="text"  name ="conn"   /></ td >
</ tr >
< tr >
< td > fields: </ td >
< td >< input  type ="text"  name ="fields"   /></ td >
</ tr >
< tr >
< td > tables: </ td >
< td >< input  type ="text"  name ="tables"   /></ td >
</ tr >
< tr >
< td  colspan ="2"  align ="center" >
< input  name ="submitButton"  type ="submit"  value ="select"   />
</ td >
</ tr >
</ table >
</ form >
</ body >
</ html >

这个页面将获得同样的结果。

b)Page-Private Parameters

page-private parameters 是当前页面的私有的参数,不像session parameterscookie parameters能够跨多个页面。

你可以通过<xsql:set-page-param>标签来明确的在你的页面中设置私有参数。

设置方法有两种,第一种直接指定参数值,第二种通过sql返回一个参数值。

如:

<? xml version="1.0" ?>
< page  xmlns:xsql ="urn:oracle-xsql"  connection ="xsql_test" >
< xsql:set-page-param  name ="lastname"  value ="chen" />
< xsql:set-page-param  name ="job" >
select job from xsql_employee where lastname='{@lastname}'
</ xsql:set-page-param >
< xsql:include-param  name ="lastname" />
< xsql:include-param  name ="job" />
< xsql:query >
select * from xsql_employee where job='{@job}'
</ xsql:query >
</ page >


c)session parameters

d)cookie

4)默认参数

在上面的例子中,我们的xsql依赖于参数的设定或者是request参数,有时,我们希望给他一个默认值。

:

<? xml version="1.0" ?>
< page  fields ="*"  conn ="xsql_test"  tables ="xsql_employee"  xmlns:xsql ="urn:oracle-xsql"  connection ="{@conn}" >
< xsql:include-request-params  />
< xsql:query >
select {@fields} from {@tables}
</ xsql:query >
</ page >

输入http://localhost:8088/xsql_test/xsql/very-unsecure.xsql

 5)使用绑定变量

目前,我们使用的的都是通过{@param}这种方式引用参数,这种方式在解析的时候只是简单的字符串的替换,这种方式在某些情况下是很方便的,但是他并不会对sql进行优化.

让我们先来看下下面的例子:

<? xml version="1.0" ?>
< page  job ="coder"  firstname ="hu"  xmlns:xsql ="urn:oracle-xsql"  connection ="xsql_test" >
< xsql:query  bind-params ="job firstname" >
select * from xsql_employee where job=? and firstname=?
</ xsql:query >
</ page >

这里我们没有用{@param}这种形式,而用了问号。在解析的时候,问号被按照<bind-params>属性中列出的参数顺序替代。

绑定变量使得优化sql语句变的简单,当你没有绑定变量的时候,sql优化器只能一次优化一个sql语句,优化器不知道将会有很多很多按照这种结构写出的sql,但是用绑定变量方式,sql优化器将预计会有很多同样结构的sql,在上面的例子中,优化器将知道会有很多按照职位和姓来查找员工.

转载于:https://www.cnblogs.com/huc87/archive/2009/07/20/1526986.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介 XSQL是目前最流行的一种可扩展的结构化查询语言。本书从一个全新的角度全面展示了如何利用XSQL结合SQL、Oracle Text、Oracle RDBMS、Java、XML和XSLT等技术的强大功能发布动态Web内容。主要内容包括:讲解如何使用XSQL、其他相关技术和Oracle数据库数据构建XML Web应用程序和Web服务;提供有关如何使用定制的行为处理程序、串行器和XSQL API增强XSQL的各种实用技巧;显示如何使用XSLT编写基于数据库数据的脚本;解释如何使用串行器随意生成图像和PDF文档等。 本书适合对Oracle、SQL、XML和Java有所了解并希望通过XSQL权衡利用多种Web技术进行Web动态内容开发的程序员和开发人员。 XSQL并不是一种令人难以琢磨的技术。利用该技术您可以轻松权衡该如何使用许多健壮、成熟且可用的技术(如SQL、HTML、HTTP、XML、Java和Oracle RDBMS等)。本书全面讨论了XSQL与这些技术之间的相互关联,详细介绍了如何使用XSQL在Web上表示数据库数据,并给出大量的代码示例,展示了如何使用XSQL和XSLT开发完整的应用程序。对XSQL感兴趣的读者可从本书中了解到如何将这些强大的技术结合起来发布动态Web内容。 本书除了介绍XSQL各种激动人心的特性外,还介绍了以下内容: ·通过XSQLOracle Text、TQL、XSLT和Java并运用Oracle数据库中的数据来构建XML Web应用程序和Web服务。 ·使用定制的行为处理程序、串行器和XSQL API增强XSQL的各种实用技巧。 ·使用XSLT编写基于数据库数据的脚本。 ·使用串行器随意生成图像和PDF文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值